From 815bcd980e5bad5ec6ca3ae094d2027888fb54b5 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 13:13:31 -0300 Subject: [PATCH 001/293] Create `Email.sendAsync` method without using Fibers. --- packages/email/email.js | 175 ++++++++++++++++++++++++++-------------- 1 file changed, 116 insertions(+), 59 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index 3f64e23692..e0daf26384 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -25,7 +25,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function(mailUrlString) { +const makeTransport = function (mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -60,7 +60,7 @@ const makeTransport = function(mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function(settings = undefined, url = undefined) { +const knownHostsTransport = function (settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -110,7 +110,7 @@ const knownHostsTransport = function(settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function() { +const getTransport = function () { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -141,37 +141,38 @@ let nextDevModeMailId = 0; let output_stream = process.stdout; // Testing hooks -EmailTest.overrideOutputStream = function(stream) { +EmailTest.overrideOutputStream = function (stream) { nextDevModeMailId = 0; output_stream = stream; }; -EmailTest.restoreOutputStream = function() { +EmailTest.restoreOutputStream = function () { output_stream = process.stdout; }; -const devModeSend = function(mail) { - let devModeMailId = nextDevModeMailId++; +const devModeSend = async function (mail) { + return new Promise((resolve, reject) => { + let devModeMailId = nextDevModeMailId++; - const stream = output_stream; + const stream = output_stream; - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - const future = new Future(); - readStream.on('end', function() { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - future.return(); + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + + 'environment variable.)\n' + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + readStream.on('end', function () { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + resolve(); + }); + readStream.on('error', (err) => reject(err)); }); - future.wait(); }; -const smtpSend = function(transport, mail) { +const smtpSend = function (transport, mail) { transport._syncSendMail(mail); }; @@ -186,7 +187,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function(f) { +Email.hookSend = function (f) { return sendHooks.register(f); }; @@ -199,6 +200,89 @@ Email.hookSend = function(f) { */ Email.customTransport = undefined; +// TODO Rewrite summary. +/** + * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server + * or if mail server returns an error. All fields should match + * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. + * + * If the `MAIL_URL` environment variable is set, actually sends the email. + * Otherwise, prints the contents of the email to standard out. + * + * Note that this package is based on **nodemailer**, so make sure to refer to + * [the documentation](http://nodemailer.com/) + * when using the `attachments` or `mailComposer` options. + * + * @locus Server + * @return {Promise} + * @param {Object} options + * @param {String} [options.from] "From:" address (required) + * @param {String|String[]} options.to,cc,bcc,replyTo + * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses + * @param {String} [options.inReplyTo] Message-ID this message is replying to + * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to + * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value + * @param {String} [options.subject] "Subject:" line + * @param {String} [options.text|html] Mail body (in plain text and/or HTML) + * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch + * @param {String} [options.icalEvent] iCalendar event attachment + * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. + * @param {Object[]} [options.attachments] Array of attachment objects, as + * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). + * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * object representing the message to be sent. Overrides all other options. + * You can create a `MailComposer` object via + * `new EmailInternals.NpmModules.mailcomposer.module`. + */ +Email.sendAsync = async function (options) { + return new Promise((resolve, reject) => { + if (options.mailComposer) { + options = options.mailComposer.mail; + } + + let send = true; + sendHooks.forEach((hook) => { + send = hook(options); + return send; + }); + if (!send) { + resolve(); + return; + } + + if (Email.customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + Email.customTransport({ packageSettings, ...options }); + resolve(); + return; + } + + const mailUrlEnv = process.env.MAIL_URL; + const mailUrlSettings = Meteor.settings.packages?.email; + + if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { + // This check is mostly necessary when using the flag --production when running locally. + // And it works as a reminder to properly set the mail URL when running locally. + reject( + new Error( + 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' + ) + ); + return; + } + + if (mailUrlEnv || mailUrlSettings) { + const transport = getTransport(); + smtpSend(transport, options); + resolve(); + return; + } + devModeSend(options) + .then(() => resolve()) + .catch((err) => reject(err)); + }); +}; + /** * @summary Send an email. Throws an `Error` on failure to contact mail server * or if mail server returns an error. All fields should match @@ -227,44 +311,17 @@ Email.customTransport = undefined; * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * @deprecated in 2.8 * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function(options) { - if (options.mailComposer) { - options = options.mailComposer.mail; - } - - let send = true; - sendHooks.forEach(hook => { - send = hook(options); - return send; - }); - if (!send) return; - - const customTransport = Email.customTransport; - if (customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - customTransport({ packageSettings, ...options }); - return; - } - - const mailUrlEnv = process.env.MAIL_URL; - const mailUrlSettings = Meteor.settings.packages?.email; - - if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { - // This check is mostly necessary when using the flag --production when running locally. - // And it works as a reminder to properly set the mail URL when running locally. - throw new Error( - 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' - ); - } - - if (mailUrlEnv || mailUrlSettings) { - const transport = getTransport(); - smtpSend(transport, options); - return; - } - devModeSend(options); +Email.send = async function (options) { + const future = new Future(); + Email.sendAsync(options) + .then(() => future.return()) + .catch((err) => { + throw err; + }); + future.wait(); }; From 631b74ff50a8de209baf9333ccaae5a59409cd57 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 15:04:55 -0300 Subject: [PATCH 002/293] Create `Email.sendAsync` method without using Fibers. --- packages/email/email.js | 75 ++++++++++++++++++++++++++++------- packages/email/email_tests.js | 38 ++++++++++++++++++ 2 files changed, 98 insertions(+), 15 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index e0daf26384..0240b186b5 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -140,6 +140,10 @@ const getTransport = function () { let nextDevModeMailId = 0; let output_stream = process.stdout; +EmailTest._getAndIncNextDevModeMailId = function () { + return nextDevModeMailId++; +}; + // Testing hooks EmailTest.overrideOutputStream = function (stream) { nextDevModeMailId = 0; @@ -150,11 +154,9 @@ EmailTest.restoreOutputStream = function () { output_stream = process.stdout; }; -const devModeSend = async function (mail) { +const devModeSendAsync = async function (mail, stream) { return new Promise((resolve, reject) => { - let devModeMailId = nextDevModeMailId++; - - const stream = output_stream; + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); // This approach does not prevent other writers to stdout from interleaving. stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); @@ -166,7 +168,7 @@ const devModeSend = async function (mail) { readStream.pipe(stream, { end: false }); readStream.on('end', function () { stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - resolve(); + resolve(stream); }); readStream.on('error', (err) => reject(err)); }); @@ -235,6 +237,7 @@ Email.customTransport = undefined; * `new EmailInternals.NpmModules.mailcomposer.module`. */ Email.sendAsync = async function (options) { + const stream = output_stream; return new Promise((resolve, reject) => { if (options.mailComposer) { options = options.mailComposer.mail; @@ -277,12 +280,34 @@ Email.sendAsync = async function (options) { resolve(); return; } - devModeSend(options) - .then(() => resolve()) + devModeSendAsync(options, stream) + .then((currentStream) => resolve(currentStream)) .catch((err) => reject(err)); }); }; +// TODO To remove in future versions (3.0.0 ????) +const devModeSend = function (mail) { + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); + + const stream = output_stream; + + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + + 'environment variable.)\n' + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + const future = new Future(); + readStream.on('end', function () { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + future.return(); + }); + future.wait(); +}; + /** * @summary Send an email. Throws an `Error` on failure to contact mail server * or if mail server returns an error. All fields should match @@ -316,12 +341,32 @@ Email.sendAsync = async function (options) { * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = async function (options) { - const future = new Future(); - Email.sendAsync(options) - .then(() => future.return()) - .catch((err) => { - throw err; - }); - future.wait(); +Email.send = function (options) { + if (options.mailComposer) { + options = options.mailComposer.mail; + } + + let send = true; + sendHooks.forEach((hook) => { + send = hook(options); + return send; + }); + if (!send) return; + + const customTransport = Email.customTransport; + if (customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + customTransport({ packageSettings, ...options }); + return; + } + if ( + Meteor.isProduction || + process.env.MAIL_URL || + Meteor.settings.packages?.email + ) { + const transport = getTransport(); + smtpSend(transport, options); + return; + } + devModeSend(options); }; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 877264ce95..bbba84205e 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -25,6 +25,44 @@ function canonicalize(string) { .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); } +Tinytest.addAsync('[Async] email - fully customizable', function (test, onComplete) { + smokeEmailTest(function () { + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + cc: ['friends@example.com', 'enemies@example.com'], + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + Date: 'dummy', + }, + }).then((currentStream) => { + test.equal( + canonicalize(currentStream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'X-Meteor-Test: a custom header\r\n' + + 'Date: dummy\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Cc: friends@example.com, enemies@example.com\r\n' + + 'Subject: This is the subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is the body\n' + + 'of the message\n' + + 'From us.\r\n' + + '====== END MAIL #0 ======\n' + ); + onComplete(); + }); + }); +}); + Tinytest.add("email - fully customizable", function (test) { smokeEmailTest(function(stream) { Email.send({ From 537cadf7b4cb2c42c189d2ca194155950ca233cb Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 16:09:12 -0300 Subject: [PATCH 003/293] Remove Promise on Email.sendAsync --- packages/email/email.js | 72 ++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index 0240b186b5..d0fe7788f1 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -238,51 +238,43 @@ Email.customTransport = undefined; */ Email.sendAsync = async function (options) { const stream = output_stream; - return new Promise((resolve, reject) => { - if (options.mailComposer) { - options = options.mailComposer.mail; - } + if (options.mailComposer) { + options = options.mailComposer.mail; + } - let send = true; - sendHooks.forEach((hook) => { - send = hook(options); - return send; - }); - if (!send) { - resolve(); - return; - } + let send = true; + sendHooks.forEach((hook) => { + send = hook(options); + return send; + }); + if (!send) { + return; + } - if (Email.customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - Email.customTransport({ packageSettings, ...options }); - resolve(); - return; - } + if (Email.customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + Email.customTransport({ packageSettings, ...options }); + return; + } - const mailUrlEnv = process.env.MAIL_URL; - const mailUrlSettings = Meteor.settings.packages?.email; + const mailUrlEnv = process.env.MAIL_URL; + const mailUrlSettings = Meteor.settings.packages?.email; - if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { - // This check is mostly necessary when using the flag --production when running locally. - // And it works as a reminder to properly set the mail URL when running locally. - reject( - new Error( - 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' - ) - ); - return; - } + if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { + // This check is mostly necessary when using the flag --production when running locally. + // And it works as a reminder to properly set the mail URL when running locally. + new Error( + 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' + ); + } - if (mailUrlEnv || mailUrlSettings) { - const transport = getTransport(); - smtpSend(transport, options); - resolve(); - return; - } - devModeSendAsync(options, stream) - .then((currentStream) => resolve(currentStream)) - .catch((err) => reject(err)); + if (mailUrlEnv || mailUrlSettings) { + const transport = getTransport(); + smtpSend(transport, options); + return; + } + return devModeSendAsync(options, stream).catch((err) => { + throw err; }); }; From 2a3b3ef9da88fd45fee27b08b0323c9f3e5f18c0 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 18:03:46 -0300 Subject: [PATCH 004/293] Create async method `CssTools.minifyCssAsync` to replace method `CssTools.minifyCss` in future --- packages/minifier-css/minifier-async-tests.js | 51 +++++++++++++++++++ packages/minifier-css/minifier.js | 41 ++++++++++----- packages/minifier-css/package.js | 1 + .../plugin/minify-css.js | 2 +- 4 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 packages/minifier-css/minifier-async-tests.js diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js new file mode 100644 index 0000000000..232ca247a2 --- /dev/null +++ b/packages/minifier-css/minifier-async-tests.js @@ -0,0 +1,51 @@ +import { CssTools } from './minifier'; +const TEST_CASES = [ + ['a \t\n{ color: red } \n', 'a{color:red}', 'whitespace check'], + [ + 'a \t\n{ color: red; margin: 1; } \n', + 'a{color:red;margin:1}', + 'only last one loses semicolon', + ], + [ + 'a \t\n{ color: red;;; margin: 1;;; } \n', + 'a{color:red;margin:1}', + 'more semicolons than needed', + ], + ['a , p \t\n{ color: red; } \n', 'a,p{color:red}', 'multiple selectors'], + ['body {}', '', 'removing empty rules'], + [ + '*.my-class { color: #fff; }', + '.my-class{color:#fff}', + 'removing universal selector', + ], + [ + 'p > *.my-class { color: #fff; }', + 'p>.my-class{color:#fff}', + 'removing optional whitespace around ">" in selector', + ], + [ + 'p + *.my-class { color: #fff; }', + 'p+.my-class{color:#fff}', + 'removing optional whitespace around "+" in selector', + ], + [ + 'a {\n\ + font:12px \'Helvetica\',"Arial",\'Nautica\';\n\ + background:url("/some/nice/picture.png");\n}', + 'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}', + 'removing quotes in font and url (if possible)', + ], + ['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'], +]; + +Tinytest.addAsync( + '[Async] minifier-css - simple CSS minification', + (test, onComplete) => { + const promises = TEST_CASES.map(([css, expected, desc]) => + CssTools.minifyCssAsync(css).then((minifiedCss) => { + test.equal(minifiedCss[0], expected, desc); + }) + ); + Promise.all(promises).then(() => onComplete()); + } +); diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index 174452f1ee..2fa610519a 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -63,25 +63,39 @@ const CssTools = { * * @param {string} cssText CSS string to minify. * @return {String[]} Array containing the minified CSS. + * @deprecated on 2.8 */ minifyCss(cssText) { - const f = new Future; - postcss([ - cssnano({ safe: true }), - ]).process(cssText, { - from: void 0, - }).then(result => { - f.return(result.css); - }).catch(error => { - f.throw(error); - }); - const minifiedCss = f.wait(); - + const f = new Future(); + CssTools.minifyCssAsync(cssText) + .then((res) => f.return(res)) + .catch((error) => f.throw(error)); // Since this function has always returned an array, we'll wrap the // minified css string in an array before returning, even though we're // only ever returning one minified css string in that array (maintaining // backwards compatibility). - return [minifiedCss]; + return f.wait(); + }, + + /** + * Minify the passed in CSS string. + * + * @param {string} cssText CSS string to minify. + * @return {Promise} Array containing the minified CSS. + */ + async minifyCssAsync(cssText) { + return new Promise((resolve, reject) => { + postcss([cssnano({ safe: true })]) + .process(cssText, { + from: void 0, + }) + .then((result) => { + resolve([result.css]); + }) + .catch((error) => { + reject(error); + }); + }); }, /** @@ -187,6 +201,7 @@ if (typeof Profile !== 'undefined') { 'parseCss', 'stringifyCss', 'minifyCss', + 'minifyCssAsync', 'mergeCssAsts', 'rewriteCssUrls', ].forEach(funcName => { diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 3447c9e4bf..ffdaf5d5d6 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -19,6 +19,7 @@ Package.onTest(function (api) { api.use('tinytest'); api.addFiles([ 'minifier-tests.js', + 'minifier-async-tests.js', 'urlrewriting-tests.js' ], 'server'); }); diff --git a/packages/standard-minifier-css/plugin/minify-css.js b/packages/standard-minifier-css/plugin/minify-css.js index 2b8c4d5e44..8ac2b0db75 100644 --- a/packages/standard-minifier-css/plugin/minify-css.js +++ b/packages/standard-minifier-css/plugin/minify-css.js @@ -60,7 +60,7 @@ class CssToolsMinifier { path: 'merged-stylesheets.css' }]; } else { - const minifiedFiles = CssTools.minifyCss(merged.code); + const minifiedFiles = await CssTools.minifyCssAsync(merged.code); result = minifiedFiles.map(minified => ({ data: minified From 470ae492b0ad7570c626cd3950ba03bfe0b2c79d Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 18:17:28 -0300 Subject: [PATCH 005/293] Remove unnecessary promise --- packages/minifier-css/minifier.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index 2fa610519a..d22aa02705 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -84,18 +84,14 @@ const CssTools = { * @return {Promise} Array containing the minified CSS. */ async minifyCssAsync(cssText) { - return new Promise((resolve, reject) => { - postcss([cssnano({ safe: true })]) - .process(cssText, { - from: void 0, - }) - .then((result) => { - resolve([result.css]); - }) - .catch((error) => { - reject(error); - }); - }); + return postcss([cssnano({ safe: true })]) + .process(cssText, { + from: void 0, + }) + .then((result) => [result.css]) + .catch((error) => { + throw new Error(error); + }); }, /** From bcba3ebe47cf732b376f91377c6045132e982735 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 18:24:35 -0300 Subject: [PATCH 006/293] Preserve original formatting and method order. --- packages/email/email.js | 222 +++++++++++++++++++++------------------- 1 file changed, 114 insertions(+), 108 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index d0fe7788f1..e877226f79 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -25,7 +25,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function (mailUrlString) { +const makeTransport = function(mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -60,7 +60,7 @@ const makeTransport = function (mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function (settings = undefined, url = undefined) { +const knownHostsTransport = function(settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -110,7 +110,7 @@ const knownHostsTransport = function (settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function () { +const getTransport = function() { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -145,36 +145,37 @@ EmailTest._getAndIncNextDevModeMailId = function () { }; // Testing hooks -EmailTest.overrideOutputStream = function (stream) { +EmailTest.overrideOutputStream = function(stream) { nextDevModeMailId = 0; output_stream = stream; }; -EmailTest.restoreOutputStream = function () { +EmailTest.restoreOutputStream = function() { output_stream = process.stdout; }; -const devModeSendAsync = async function (mail, stream) { - return new Promise((resolve, reject) => { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); +const devModeSend = function(mail) { + let devModeMailId = nextDevModeMailId++; - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - readStream.on('end', function () { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - resolve(stream); - }); - readStream.on('error', (err) => reject(err)); + const stream = output_stream; + + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + + 'environment variable.)\n' + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + const future = new Future(); + readStream.on('end', function() { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + future.return(); }); + future.wait(); }; -const smtpSend = function (transport, mail) { +const smtpSend = function(transport, mail) { transport._syncSendMail(mail); }; @@ -189,7 +190,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function (f) { +Email.hookSend = function(f) { return sendHooks.register(f); }; @@ -202,6 +203,96 @@ Email.hookSend = function (f) { */ Email.customTransport = undefined; +/** + * @summary Send an email. Throws an `Error` on failure to contact mail server + * or if mail server returns an error. All fields should match + * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. + * + * If the `MAIL_URL` environment variable is set, actually sends the email. + * Otherwise, prints the contents of the email to standard out. + * + * Note that this package is based on **nodemailer**, so make sure to refer to + * [the documentation](http://nodemailer.com/) + * when using the `attachments` or `mailComposer` options. + * + * @locus Server + * @param {Object} options + * @param {String} [options.from] "From:" address (required) + * @param {String|String[]} options.to,cc,bcc,replyTo + * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses + * @param {String} [options.inReplyTo] Message-ID this message is replying to + * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to + * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value + * @param {String} [options.subject] "Subject:" line + * @param {String} [options.text|html] Mail body (in plain text and/or HTML) + * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch + * @param {String} [options.icalEvent] iCalendar event attachment + * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. + * @param {Object[]} [options.attachments] Array of attachment objects, as + * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). + * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * @deprecated in 2.8 + * object representing the message to be sent. Overrides all other options. + * You can create a `MailComposer` object via + * `new EmailInternals.NpmModules.mailcomposer.module`. + */ +Email.send = function(options) { + if (options.mailComposer) { + options = options.mailComposer.mail; + } + + let send = true; + sendHooks.forEach(hook => { + send = hook(options); + return send; + }); + if (!send) return; + + const customTransport = Email.customTransport; + if (customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + customTransport({ packageSettings, ...options }); + return; + } + + const mailUrlEnv = process.env.MAIL_URL; + const mailUrlSettings = Meteor.settings.packages?.email; + + if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { + // This check is mostly necessary when using the flag --production when running locally. + // And it works as a reminder to properly set the mail URL when running locally. + throw new Error( + 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' + ); + } + + if (mailUrlEnv || mailUrlSettings) { + const transport = getTransport(); + smtpSend(transport, options); + return; + } + devModeSend(options); +}; + +const devModeSendAsync = async function (mail, stream) { + return new Promise((resolve, reject) => { + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); + + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + + 'environment variable.)\n' + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + readStream.on('end', function () { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + resolve(stream); + }); + readStream.on('error', (err) => reject(err)); + }); +}; // TODO Rewrite summary. /** * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server @@ -277,88 +368,3 @@ Email.sendAsync = async function (options) { throw err; }); }; - -// TODO To remove in future versions (3.0.0 ????) -const devModeSend = function (mail) { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); - - const stream = output_stream; - - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - const future = new Future(); - readStream.on('end', function () { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - future.return(); - }); - future.wait(); -}; - -/** - * @summary Send an email. Throws an `Error` on failure to contact mail server - * or if mail server returns an error. All fields should match - * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. - * - * If the `MAIL_URL` environment variable is set, actually sends the email. - * Otherwise, prints the contents of the email to standard out. - * - * Note that this package is based on **nodemailer**, so make sure to refer to - * [the documentation](http://nodemailer.com/) - * when using the `attachments` or `mailComposer` options. - * - * @locus Server - * @param {Object} options - * @param {String} [options.from] "From:" address (required) - * @param {String|String[]} options.to,cc,bcc,replyTo - * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses - * @param {String} [options.inReplyTo] Message-ID this message is replying to - * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to - * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value - * @param {String} [options.subject] "Subject:" line - * @param {String} [options.text|html] Mail body (in plain text and/or HTML) - * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch - * @param {String} [options.icalEvent] iCalendar event attachment - * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. - * @param {Object[]} [options.attachments] Array of attachment objects, as - * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). - * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * @deprecated in 2.8 - * object representing the message to be sent. Overrides all other options. - * You can create a `MailComposer` object via - * `new EmailInternals.NpmModules.mailcomposer.module`. - */ -Email.send = function (options) { - if (options.mailComposer) { - options = options.mailComposer.mail; - } - - let send = true; - sendHooks.forEach((hook) => { - send = hook(options); - return send; - }); - if (!send) return; - - const customTransport = Email.customTransport; - if (customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - customTransport({ packageSettings, ...options }); - return; - } - if ( - Meteor.isProduction || - process.env.MAIL_URL || - Meteor.settings.packages?.email - ) { - const transport = getTransport(); - smtpSend(transport, options); - return; - } - devModeSend(options); -}; From 6bc5b0a628aae20a5ab803889c5cfc5127a8850e Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 27 Jul 2022 18:27:02 -0300 Subject: [PATCH 007/293] Preserve original formatting and method order. --- packages/email/email.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/email/email.js b/packages/email/email.js index e877226f79..af07a8766a 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -155,7 +155,7 @@ EmailTest.restoreOutputStream = function() { }; const devModeSend = function(mail) { - let devModeMailId = nextDevModeMailId++; + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); const stream = output_stream; From 866fa2093dda9695f276e7105c99b5437f134308 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 28 Jul 2022 11:57:53 -0300 Subject: [PATCH 008/293] Remove incorrect @deprecated annotation. The correct strategy is: 1. Only sync. (Current) 2. Both sync and async (with a suffix). 3. Only async (without a suffix). Thank you! @StorytellerCZ and @radekmie --- packages/email/email.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/email/email.js b/packages/email/email.js index af07a8766a..20a04aa72f 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -231,7 +231,6 @@ Email.customTransport = undefined; * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * @deprecated in 2.8 * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. From b78c0471b601011832e9d8d8c1849a40eece13c4 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 28 Jul 2022 17:57:43 -0300 Subject: [PATCH 009/293] Including all send synchronous tests to async tests email - multiple e-mails same stream: Broken in async test --- packages/email/email.js | 5 +- packages/email/email_test_helpers.js | 27 ++ packages/email/email_tests.js | 554 +++++++++++---------------- packages/email/email_tests_data.js | 254 ++++++++++++ 4 files changed, 500 insertions(+), 340 deletions(-) create mode 100644 packages/email/email_test_helpers.js create mode 100644 packages/email/email_tests_data.js diff --git a/packages/email/email.js b/packages/email/email.js index 20a04aa72f..68056e1000 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -328,6 +328,7 @@ const devModeSendAsync = async function (mail, stream) { */ Email.sendAsync = async function (options) { const stream = output_stream; + const { isTestMode } = Email; if (options.mailComposer) { options = options.mailComposer.mail; } @@ -338,13 +339,13 @@ Email.sendAsync = async function (options) { return send; }); if (!send) { - return; + return isTestMode && stream; } if (Email.customTransport) { const packageSettings = Meteor.settings.packages?.email || {}; Email.customTransport({ packageSettings, ...options }); - return; + return isTestMode && stream; } const mailUrlEnv = process.env.MAIL_URL; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js new file mode 100644 index 0000000000..c0c7d0c847 --- /dev/null +++ b/packages/email/email_test_helpers.js @@ -0,0 +1,27 @@ +import streamBuffers from 'stream-buffers'; + +export const devWarningBanner = + '(Mail not sent; to enable ' + + 'sending, set the MAIL_URL environment variable.)\n'; + +export const smokeEmailTest = (testFunction) => { + // This only tests dev mode, so don't run the test if this is deployed. + if (process.env.MAIL_URL) return; + + try { + const stream = new streamBuffers.WritableStreamBuffer(); + EmailTest.overrideOutputStream(stream); + + testFunction(stream); + } finally { + EmailTest.restoreOutputStream(); + } +}; + +export const canonicalize = (string) => { + // Remove generated content for test.equal to succeed. + return string + .replace(/Message-ID: <[^<>]*>\r\n/, 'Message-ID: <...>\r\n') + .replace(/Date: (?!dummy).*\r\n/, 'Date: ...\r\n') + .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/gm, '$1--...$2'); +}; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index bbba84205e..472d33131b 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,342 +1,78 @@ -import streamBuffers from 'stream-buffers'; +import { smokeEmailTest } from './email_test_helpers'; +import { TEST_CASES } from './email_tests_data'; -const devWarningBanner = "(Mail not sent; to enable " + - "sending, set the MAIL_URL environment variable.)\n"; +Email.isTestMode = true; -function smokeEmailTest(testFunction) { - // This only tests dev mode, so don't run the test if this is deployed. - if (process.env.MAIL_URL) return; +// Create dynamic sync tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.add(`[Sync] ${title}`, function (test) { + smokeEmailTest((stream) => { + Object.entries(options).forEach(([key, option]) => { + const testCall = testCalls[key]; + Email.send(option); + testCall(test, stream); + }); + }); + }); +}); - try { - const stream = new streamBuffers.WritableStreamBuffer; - EmailTest.overrideOutputStream(stream); +// Create dynamic async tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { + smokeEmailTest(() => { + const allPromises = Object.entries(options).map(([key, option]) => { + const testCall = testCalls[key]; + return Email.sendAsync(option).then((stream) => { + testCall(test, stream); + }); + }); + Promise.all(allPromises).then(() => onComplete()); + }); + }); +}); - testFunction(stream); +// Individual sync tests - } finally { - EmailTest.restoreOutputStream(); +Tinytest.add( + '[Sync] email - alternate API is used for sending gets data', + function (test) { + smokeEmailTest(function (stream) { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }); + test.equal(stream.getContentsAsString('utf8'), false); + }); + + smokeEmailTest(function (stream) { + Meteor.settings.packages = { + email: { service: '1on1', user: 'test', password: 'pwd' }, + }; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }); + + test.equal(stream.getContentsAsString('utf8'), false); + }); + Email.customTransport = undefined; + Meteor.settings.packages = undefined; } -} +); -function canonicalize(string) { - // Remove generated content for test.equal to succeed. - return string.replace(/Message-ID: <[^<>]*>\r\n/, "Message-ID: <...>\r\n") - .replace(/Date: (?!dummy).*\r\n/, "Date: ...\r\n") - .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); -} - -Tinytest.addAsync('[Async] email - fully customizable', function (test, onComplete) { - smokeEmailTest(function () { - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - cc: ['friends@example.com', 'enemies@example.com'], - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - headers: { - 'X-Meteor-Test': 'a custom header', - Date: 'dummy', - }, - }).then((currentStream) => { - test.equal( - canonicalize(currentStream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'X-Meteor-Test: a custom header\r\n' + - 'Date: dummy\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Cc: friends@example.com, enemies@example.com\r\n' + - 'Subject: This is the subject\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'This is the body\n' + - 'of the message\n' + - 'From us.\r\n' + - '====== END MAIL #0 ======\n' - ); - onComplete(); - }); - }); -}); - -Tinytest.add("email - fully customizable", function (test) { - smokeEmailTest(function(stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - cc: ["friends@example.com", "enemies@example.com"], - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - 'Date': 'dummy', - }, - }); - // XXX brittle if mailcomposer changes header order, etc - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "X-Meteor-Test: a custom header\r\n" + - "Date: dummy\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Cc: friends@example.com, enemies@example.com\r\n" + - "Subject: This is the subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is the body\n" + - "of the message\n" + - "From us.\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - undefined headers sends properly", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m); - }); -}); - -Tinytest.add("email - multiple e-mails same stream", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - const contents = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); - test.matches(contents, /^From: foo@example.com$/m); - test.matches(contents, /^To: bar@example.com$/m); - - Email.send({ - from: "qux@example.com", - to: "baz@example.com", - subject: "This is important", - text: "This is another message\nFrom Qux.", - }); - - const contents2 = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); - test.matches(contents2, /^From: qux@example.com$/m); - test.matches(contents2, /^To: baz@example.com$/m); - - }); -}); - -Tinytest.add("email - using mail composer", function (test) { - smokeEmailTest(function (stream) { - // Test direct MailComposer usage. - const mc = new EmailInternals.NpmModules.mailcomposer.module({ - from: "a@b.com", - text: "body" - }); - Email.send({mailComposer: mc}); - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: a@b.com\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "body\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - date auto generated", function (test) { - smokeEmailTest(function (stream) { - // Test if date header is automatically generated, if not specified - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - }, - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^Date: .+$/m); - }); -}); - -Tinytest.add("email - long lines", function (test) { - smokeEmailTest(function (stream) { - // Test that long header lines get wrapped with single leading whitespace, - // and that long body lines get wrapped with quoted-printable conventions. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is a very very very very very very very very very very very very long subject", - text: "This is a very very very very very very very very very very very very long text", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: This is a very very very very very very very very " + - "very very very\r\n very long subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is a very very very very very very very very very very " + - "very very long =\r\ntext\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - unicode", function (test) { - smokeEmailTest(function (stream) { - // Test that unicode characters in header and body get encoded. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "\u263a", - text: "I \u2665 Meteor", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: =?UTF-8?B?4pi6?=\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "I =E2=99=A5 Meteor\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - text and html", function (test) { - smokeEmailTest(function (stream) { - // Test including both text and HTML versions of message. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: multipart/alternative;\r\n" + - ' boundary="--...-Part_1"\r\n' + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Message-ID: <...>\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/plain; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "*Cool*, man\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/html; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "Cool, man\r\n" + - "----...-Part_1--\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - alternate API is used for sending gets data", function(test) { - smokeEmailTest(function(stream) { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - test.equal(stream.getContentsAsString("utf8"), false); - }); - - smokeEmailTest(function(stream) { - Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' } }; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(stream.getContentsAsString("utf8"), false); - }); - Email.customTransport = undefined; - Meteor.settings.packages = undefined; -}); - -Tinytest.add("email - URL string for known hosts", function(test) { - const oneTransport = EmailTest.knowHostsTransport({ service: '1und1', user: 'test', password: 'pwd' }); - test.equal(oneTransport.transporter.auth.type, 'LOGIN'); - test.equal(oneTransport.transporter.auth.user, 'test'); - - const aolUrlTransport = EmailTest.knowHostsTransport(null, 'AOL://test:pwd@aol.com'); - test.equal(aolUrlTransport.transporter.auth.user, 'test'); - test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); - - const outlookTransport = EmailTest.knowHostsTransport(null, 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com'); - const outlookTransport2 = EmailTest.knowHostsTransport(undefined, 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com'); - test.equal(outlookTransport.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.options.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.transporter.options.service, 'outlook365'); - test.equal(outlookTransport2.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport2.transporter.options.service, 'outlook365'); - - const hotmailTransport = EmailTest.knowHostsTransport(undefined, 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com'); - console.dir(hotmailTransport); - test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - - const falseService = { service: '1on1', user: 'test', password: 'pwd' }; - const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; - test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); - test.throws(() => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), errorMsg); -}); - -Tinytest.add("email - hooks stop the sending", function(test) { +Tinytest.add('[Sync] email - hooks stop the sending', function (test) { // Register hooks const hook1 = Email.hookSend((options) => { // Test that we get options through @@ -351,17 +87,159 @@ Tinytest.add("email - hooks stop the sending", function(test) { const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(function(stream) { + smokeEmailTest(function (stream) { Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', }); - test.equal(stream.getContentsAsString("utf8"), false); + test.equal(stream.getContentsAsString('utf8'), false); }); hook1.stop(); hook2.stop(); hook3.stop(); }); + +// Individual Async tests + +Tinytest.addAsync( + '[Async] email - alternate API is used for sending gets data', + function (test, onComplete) { + const allPromises = []; + smokeEmailTest(() => { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }).then((stream) => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + + smokeEmailTest(function () { + Meteor.settings.packages = { + email: { service: '1on1', user: 'test', password: 'pwd' }, + }; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }).then((stream) => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + Promise.all(allPromises).then(() => { + Email.customTransport = undefined; + Meteor.settings.packages = undefined; + onComplete(); + }); + } +); + +Tinytest.addAsync( + '[Async] email - hooks stop the sending', + function (test, onComplete) { + // Register hooks + const hook1 = Email.hookSend((options) => { + // Test that we get options through + test.equal(options.from, 'foo@example.com'); + console.log('EXECUTE'); + return true; + }); + const hook2 = Email.hookSend(() => { + console.log('STOP'); + return false; + }); + const hook3 = Email.hookSend(() => { + console.log('FAIL'); + }); + smokeEmailTest(() => { + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }).then((stream) => { + test.equal(stream.getContentsAsString('utf8'), false); + hook1.stop(); + hook2.stop(); + hook3.stop(); + onComplete(); + }); + }); + } +); + +// Another tests + +Tinytest.add('[Sync] email - URL string for known hosts', function (test) { + const oneTransport = EmailTest.knowHostsTransport({ + service: '1und1', + user: 'test', + password: 'pwd', + }); + test.equal(oneTransport.transporter.auth.type, 'LOGIN'); + test.equal(oneTransport.transporter.auth.user, 'test'); + + const aolUrlTransport = EmailTest.knowHostsTransport( + null, + 'AOL://test:pwd@aol.com' + ); + test.equal(aolUrlTransport.transporter.auth.user, 'test'); + test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); + + const outlookTransport = EmailTest.knowHostsTransport( + null, + 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com' + ); + const outlookTransport2 = EmailTest.knowHostsTransport( + undefined, + 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com' + ); + test.equal( + outlookTransport.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal( + outlookTransport.options.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport.transporter.options.service, 'outlook365'); + test.equal( + outlookTransport2.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport2.transporter.options.service, 'outlook365'); + + const hotmailTransport = EmailTest.knowHostsTransport( + undefined, + 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com' + ); + console.dir(hotmailTransport); + test.equal(hotmailTransport.transporter.options.service, 'hotmail'); + + const falseService = { service: '1on1', user: 'test', password: 'pwd' }; + const errorMsg = + 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; + test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); + test.throws( + () => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), + errorMsg + ); +}); diff --git a/packages/email/email_tests_data.js b/packages/email/email_tests_data.js new file mode 100644 index 0000000000..095c1fb9d2 --- /dev/null +++ b/packages/email/email_tests_data.js @@ -0,0 +1,254 @@ +import { canonicalize, devWarningBanner } from './email_test_helpers'; + +export const TEST_CASES = [ + { + title: 'email - fully customizable', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + cc: ['friends@example.com', 'enemies@example.com'], + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + Date: 'dummy', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + // XXX brittle if mailcomposer changes header order, etc + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'X-Meteor-Test: a custom header\r\n' + + 'Date: dummy\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Cc: friends@example.com, enemies@example.com\r\n' + + 'Subject: This is the subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is the body\n' + + 'of the message\n' + + 'From us.\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - undefined headers sends properly', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m + ); + }, + }, + }, + { + title: 'email - multiple e-mails same stream', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + 1: { + from: 'qux@example.com', + to: 'baz@example.com', + subject: 'This is important', + text: 'This is another message\nFrom Qux.', + }, + }, + + testCalls: { + 0: (test, stream) => { + const contents = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); + test.matches(contents, /^From: foo@example.com$/m); + test.matches(contents, /^To: bar@example.com$/m); + }, + 1: (test, stream) => { + const contents2 = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); + test.matches(contents2, /^From: qux@example.com$/m); + test.matches(contents2, /^To: baz@example.com$/m); + }, + }, + }, + { + title: 'email - using mail composer', + options: { + 0: { + mailComposer: new EmailInternals.NpmModules.mailcomposer.module({ + from: 'a@b.com', + text: 'body', + }), + }, + }, + + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: a@b.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'body\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - date auto generated', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^Date: .+$/m + ); + }, + }, + }, + { + title: 'email - long lines', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: + 'This is a very very very very very very very very very very very very long subject', + text: 'This is a very very very very very very very very very very very very long text', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: This is a very very very very very very very very ' + + 'very very very\r\n very long subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is a very very very very very very very very very very ' + + 'very very long =\r\ntext\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - unicode', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: '\u263a', + text: 'I \u2665 Meteor', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: =?UTF-8?B?4pi6?=\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'I =E2=99=A5 Meteor\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - text and html', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: multipart/alternative;\r\n' + + ' boundary="--...-Part_1"\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + '*Cool*, man\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/html; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + 'Cool, man\r\n' + + '----...-Part_1--\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, +]; + From e76009507d8543b87b189e69840d7fd97be14de9 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 28 Jul 2022 18:50:53 -0300 Subject: [PATCH 010/293] Refactor email send methods and organize tests - Make Email.send using Email.sendAsync with Promisse.await() (Fibers) - Allow send method to receive a stream object and use in the devSendMode method for tests. - Remove usage of Fibers Future - Code formatting --- packages/email/email.js | 131 +++++++-------------------- packages/email/email_test_helpers.js | 12 +-- packages/email/email_tests.js | 27 +++--- 3 files changed, 54 insertions(+), 116 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index 68056e1000..cbe588c2ae 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -2,7 +2,6 @@ import { Meteor } from 'meteor/meteor'; import { Log } from 'meteor/logging'; import { Hook } from 'meteor/callback-hook'; -import Future from 'fibers/future'; import url from 'url'; import nodemailer from 'nodemailer'; import wellKnow from 'nodemailer/lib/well-known'; @@ -25,7 +24,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function(mailUrlString) { +const makeTransport = function (mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -60,7 +59,7 @@ const makeTransport = function(mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function(settings = undefined, url = undefined) { +const knownHostsTransport = function (settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -110,7 +109,7 @@ const knownHostsTransport = function(settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function() { +const getTransport = function () { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -138,44 +137,37 @@ const getTransport = function() { }; let nextDevModeMailId = 0; -let output_stream = process.stdout; EmailTest._getAndIncNextDevModeMailId = function () { return nextDevModeMailId++; }; // Testing hooks -EmailTest.overrideOutputStream = function(stream) { +EmailTest.resetNextDevModeMailId = function () { nextDevModeMailId = 0; - output_stream = stream; }; -EmailTest.restoreOutputStream = function() { - output_stream = process.stdout; -}; +const devModeSendAsync = async function (mail, stream) { + return new Promise((resolve, reject) => { + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); -const devModeSend = function(mail) { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); - - const stream = output_stream; - - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - const future = new Future(); - readStream.on('end', function() { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - future.return(); + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + + 'environment variable.)\n' + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + readStream.on('end', function () { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + resolve(); + }); + readStream.on('error', (err) => reject(err)); }); - future.wait(); }; -const smtpSend = function(transport, mail) { +const smtpSend = function (transport, mail) { transport._syncSendMail(mail); }; @@ -190,7 +182,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function(f) { +Email.hookSend = function (f) { return sendHooks.register(f); }; @@ -231,67 +223,16 @@ Email.customTransport = undefined; * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * @param {Object} [options.stream] Output stream to write email on development environment * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function(options) { - if (options.mailComposer) { - options = options.mailComposer.mail; - } - - let send = true; - sendHooks.forEach(hook => { - send = hook(options); - return send; - }); - if (!send) return; - - const customTransport = Email.customTransport; - if (customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - customTransport({ packageSettings, ...options }); - return; - } - - const mailUrlEnv = process.env.MAIL_URL; - const mailUrlSettings = Meteor.settings.packages?.email; - - if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { - // This check is mostly necessary when using the flag --production when running locally. - // And it works as a reminder to properly set the mail URL when running locally. - throw new Error( - 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' - ); - } - - if (mailUrlEnv || mailUrlSettings) { - const transport = getTransport(); - smtpSend(transport, options); - return; - } - devModeSend(options); +Email.send = function (options) { + // Using Fibers Promise.await + Promise.await(Email.sendAsync(options)); }; -const devModeSendAsync = async function (mail, stream) { - return new Promise((resolve, reject) => { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); - - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - readStream.on('end', function () { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - resolve(stream); - }); - readStream.on('error', (err) => reject(err)); - }); -}; // TODO Rewrite summary. /** * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server @@ -322,30 +263,28 @@ const devModeSendAsync = async function (mail, stream) { * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * @param {Object} [options.stream] Output stream to write email on development environment * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ Email.sendAsync = async function (options) { - const stream = output_stream; - const { isTestMode } = Email; - if (options.mailComposer) { - options = options.mailComposer.mail; - } + const { stream = process.stdout, ...rest } = options; + const email = rest.mailComposer ? rest.mailComposer.mail : rest; let send = true; sendHooks.forEach((hook) => { - send = hook(options); + send = hook(email); return send; }); if (!send) { - return isTestMode && stream; + return; } if (Email.customTransport) { const packageSettings = Meteor.settings.packages?.email || {}; - Email.customTransport({ packageSettings, ...options }); - return isTestMode && stream; + Email.customTransport({ packageSettings, ...email }); + return; } const mailUrlEnv = process.env.MAIL_URL; @@ -361,10 +300,10 @@ Email.sendAsync = async function (options) { if (mailUrlEnv || mailUrlSettings) { const transport = getTransport(); - smtpSend(transport, options); + smtpSend(transport, email); return; } - return devModeSendAsync(options, stream).catch((err) => { + return devModeSendAsync(email, stream).catch((err) => { throw err; }); }; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js index c0c7d0c847..a8706ab1c9 100644 --- a/packages/email/email_test_helpers.js +++ b/packages/email/email_test_helpers.js @@ -7,15 +7,9 @@ export const devWarningBanner = export const smokeEmailTest = (testFunction) => { // This only tests dev mode, so don't run the test if this is deployed. if (process.env.MAIL_URL) return; - - try { - const stream = new streamBuffers.WritableStreamBuffer(); - EmailTest.overrideOutputStream(stream); - - testFunction(stream); - } finally { - EmailTest.restoreOutputStream(); - } + const stream = new streamBuffers.WritableStreamBuffer(); + EmailTest.resetNextDevModeMailId(); + testFunction(stream); }; export const canonicalize = (string) => { diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 472d33131b..c01bd8f377 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,15 +1,14 @@ +import { Email } from 'meteor/email'; import { smokeEmailTest } from './email_test_helpers'; import { TEST_CASES } from './email_tests_data'; -Email.isTestMode = true; - // Create dynamic sync tests TEST_CASES.forEach(({ title, options, testCalls }) => { Tinytest.add(`[Sync] ${title}`, function (test) { smokeEmailTest((stream) => { Object.entries(options).forEach(([key, option]) => { const testCall = testCalls[key]; - Email.send(option); + Email.send({ ...option, stream }); testCall(test, stream); }); }); @@ -19,10 +18,10 @@ TEST_CASES.forEach(({ title, options, testCalls }) => { // Create dynamic async tests TEST_CASES.forEach(({ title, options, testCalls }) => { Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { - smokeEmailTest(() => { + smokeEmailTest((stream) => { const allPromises = Object.entries(options).map(([key, option]) => { const testCall = testCalls[key]; - return Email.sendAsync(option).then((stream) => { + return Email.sendAsync({ ...option, stream }).then(() => { testCall(test, stream); }); }); @@ -45,6 +44,7 @@ Tinytest.add( to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', + stream, }); test.equal(stream.getContentsAsString('utf8'), false); }); @@ -63,6 +63,7 @@ Tinytest.add( to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', + stream, }); test.equal(stream.getContentsAsString('utf8'), false); @@ -93,6 +94,7 @@ Tinytest.add('[Sync] email - hooks stop the sending', function (test) { to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', + stream, }); test.equal(stream.getContentsAsString('utf8'), false); @@ -108,7 +110,7 @@ Tinytest.addAsync( '[Async] email - alternate API is used for sending gets data', function (test, onComplete) { const allPromises = []; - smokeEmailTest(() => { + smokeEmailTest((stream) => { Email.customTransport = (options) => { test.equal(options.from, 'foo@example.com'); }; @@ -118,13 +120,14 @@ Tinytest.addAsync( to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', - }).then((stream) => { + stream, + }).then(() => { test.equal(stream.getContentsAsString('utf8'), false); }) ); }); - smokeEmailTest(function () { + smokeEmailTest(function (stream) { Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' }, }; @@ -139,7 +142,8 @@ Tinytest.addAsync( to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', - }).then((stream) => { + stream, + }).then(() => { test.equal(stream.getContentsAsString('utf8'), false); }) ); @@ -169,13 +173,14 @@ Tinytest.addAsync( const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(() => { + smokeEmailTest((stream) => { Email.sendAsync({ from: 'foo@example.com', to: 'bar@example.com', text: '*Cool*, man', html: 'Cool, man', - }).then((stream) => { + stream, + }).then(() => { test.equal(stream.getContentsAsString('utf8'), false); hook1.stop(); hook2.stop(); From ff0da119b7096765c8d50e6b97f3a6b512440af4 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 28 Jul 2022 18:54:50 -0300 Subject: [PATCH 011/293] Include missed throw error. --- packages/email/email.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/email/email.js b/packages/email/email.js index cbe588c2ae..350109bb59 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -293,7 +293,7 @@ Email.sendAsync = async function (options) { if (Meteor.isProduction && !mailUrlEnv && !mailUrlSettings) { // This check is mostly necessary when using the flag --production when running locally. // And it works as a reminder to properly set the mail URL when running locally. - new Error( + throw new Error( 'You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.' ); } From 6e73d192e8abe2dd863567e300e19b7e152e19d0 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 29 Jul 2022 09:17:44 -0300 Subject: [PATCH 012/293] Fix broken test. --- packages/email/email.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index 350109bb59..a7183a9731 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -152,16 +152,18 @@ const devModeSendAsync = async function (mail, stream) { let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( + const output = ['====== BEGIN MAIL #' + devModeMailId + ' ======\n']; + output.push( '(Mail not sent; to enable sending, set the MAIL_URL ' + - 'environment variable.)\n' + 'environment variable.)\n' ); const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); + readStream.on('data', buffer => { + output.push(buffer.toString()); + }); readStream.on('end', function () { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - resolve(); + output.push('====== END MAIL #' + devModeMailId + ' ======\n'); + stream.write(output.join(''), () => resolve()); }); readStream.on('error', (err) => reject(err)); }); From 996ab0b831bfff60e325e1895a7c35f1cc0e2f24 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 29 Jul 2022 09:25:30 -0300 Subject: [PATCH 013/293] Using `Promise.await` to resolve the async method. Suggested in Code Review --- packages/minifier-css/minifier.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index d22aa02705..77058554e2 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -1,6 +1,5 @@ import path from 'path'; import url from 'url'; -import Future from 'fibers/future'; import postcss from 'postcss'; import cssnano from 'cssnano'; @@ -66,15 +65,7 @@ const CssTools = { * @deprecated on 2.8 */ minifyCss(cssText) { - const f = new Future(); - CssTools.minifyCssAsync(cssText) - .then((res) => f.return(res)) - .catch((error) => f.throw(error)); - // Since this function has always returned an array, we'll wrap the - // minified css string in an array before returning, even though we're - // only ever returning one minified css string in that array (maintaining - // backwards compatibility). - return f.wait(); + return Promise.await(CssTools.minifyCssAsync(cssText)); }, /** From cbffccb0b9d1b14bb6c5ca0ac3f93919401b9449 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 29 Jul 2022 09:30:12 -0300 Subject: [PATCH 014/293] Remove incorrect @deprecated annotation. --- packages/minifier-css/minifier.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index 77058554e2..c1cb595e23 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -62,7 +62,6 @@ const CssTools = { * * @param {string} cssText CSS string to minify. * @return {String[]} Array containing the minified CSS. - * @deprecated on 2.8 */ minifyCss(cssText) { return Promise.await(CssTools.minifyCssAsync(cssText)); From 5ebf8ff3b2f63877ee665e46bfcf16a5db39a30c Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 29 Jul 2022 10:17:03 -0300 Subject: [PATCH 015/293] Use await and remove unnecessary catch. --- packages/minifier-css/minifier.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index c1cb595e23..a4c662e9e5 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -74,14 +74,11 @@ const CssTools = { * @return {Promise} Array containing the minified CSS. */ async minifyCssAsync(cssText) { - return postcss([cssnano({ safe: true })]) + return await postcss([cssnano({ safe: true })]) .process(cssText, { from: void 0, }) - .then((result) => [result.css]) - .catch((error) => { - throw new Error(error); - }); + .then((result) => [result.css]); }, /** From e7060c29f4a3fbaf91d0fe291700f1fb46e6e9e5 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 29 Jul 2022 10:27:06 -0300 Subject: [PATCH 016/293] Make method test async and return promise to handle rejection. --- packages/minifier-css/minifier-async-tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js index 232ca247a2..755595ba6e 100644 --- a/packages/minifier-css/minifier-async-tests.js +++ b/packages/minifier-css/minifier-async-tests.js @@ -40,12 +40,12 @@ const TEST_CASES = [ Tinytest.addAsync( '[Async] minifier-css - simple CSS minification', - (test, onComplete) => { + async (test) => { const promises = TEST_CASES.map(([css, expected, desc]) => CssTools.minifyCssAsync(css).then((minifiedCss) => { test.equal(minifiedCss[0], expected, desc); }) ); - Promise.all(promises).then(() => onComplete()); + return Promise.all(promises); } ); From 9f904ba48b1144078e2acfa36adb532b3b028c62 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Mon, 22 Aug 2022 21:26:38 -0300 Subject: [PATCH 017/293] Change accounts and oauth to use async --- packages/accounts-base/accounts_server.js | 33 ++-- packages/accounts-password/password_server.js | 12 +- packages/google-oauth/google_server.js | 163 ++++++++++-------- packages/oauth1/oauth1_server.js | 4 +- packages/oauth2/oauth2_server.js | 4 +- 5 files changed, 121 insertions(+), 95 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 9088bbbea9..fea56b222a 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -434,7 +434,7 @@ export class AccountsServer extends AccountsCommon { // If the login is allowed and isn't aborted by a validate login hook // callback, log in the user. // - _attemptLogin( + async _attemptLogin( methodInvocation, methodName, methodArgs, @@ -494,18 +494,18 @@ export class AccountsServer extends AccountsCommon { // Ensure that thrown exceptions are caught and that login hook // callbacks are still called. // - _loginMethod( + async _loginMethod( methodInvocation, methodName, methodArgs, type, fn ) { - return this._attemptLogin( + return await this._attemptLogin( methodInvocation, methodName, methodArgs, - tryLoginMethod(type, fn) + await tryLoginMethod(type, fn) ); }; @@ -587,11 +587,10 @@ export class AccountsServer extends AccountsCommon { // Try all of the registered login handlers until one of them doesn't // return `undefined`, meaning it handled this call to `login`. Return // that return value. - _runLoginHandlers(methodInvocation, options) { - for (let handler of this._loginHandlers) { - const result = tryLoginMethod( - handler.name, - () => handler.handler.call(methodInvocation, options) + async _runLoginHandlers(methodInvocation, options) { + for await (let handler of this._loginHandlers) { + const result = await tryLoginMethod(handler.name, async () => + await handler.handler.call(methodInvocation, options) ); if (result) { @@ -599,7 +598,10 @@ export class AccountsServer extends AccountsCommon { } if (result !== undefined) { - throw new Meteor.Error(400, "A login handler should return a result or undefined"); + throw new Meteor.Error( + 400, + 'A login handler should return a result or undefined' + ); } } @@ -644,14 +646,15 @@ export class AccountsServer extends AccountsCommon { // If successful, returns {token: reconnectToken, id: userId} // If unsuccessful (for example, if the user closed the oauth login popup), // throws an error describing the reason - methods.login = function (options) { + methods.login = async function (options) { // Login handlers should really also check whatever field they look at in // options, but we don't enforce it. check(options, Object); - const result = accounts._runLoginHandlers(this, options); + const result = await accounts._runLoginHandlers(this, options); + //console.log({result}); - return accounts._attemptLogin(this, "login", arguments, result); + return await accounts._attemptLogin(this, "login", arguments, result); }; methods.logout = function () { @@ -1512,10 +1515,10 @@ const cloneAttemptWithConnection = (connection, attempt) => { return clonedAttempt; }; -const tryLoginMethod = (type, fn) => { +const tryLoginMethod = async (type, fn) => { let result; try { - result = fn(); + result = await fn(); } catch (e) { result = {error: e}; diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index ea1236313c..75c7c30e0c 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -560,10 +560,10 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData, extraParams) => { // Take token from sendResetPasswordEmail or sendEnrollmentEmail, change // the users password, and log them in. -Meteor.methods({resetPassword: function (...args) { +Meteor.methods({resetPassword: async function (...args) { const token = args[0]; const newPassword = args[1]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "resetPassword", args, @@ -712,9 +712,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData, extraParams) => // Take token from sendVerificationEmail, mark the email as verified, // and log them in. -Meteor.methods({verifyEmail: function (...args) { +Meteor.methods({verifyEmail: async function (...args) { const token = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "verifyEmail", args, @@ -911,9 +911,9 @@ const createUser = options => { }; // method for create user. Requests come from the client. -Meteor.methods({createUser: function (...args) { +Meteor.methods({createUser: async function (...args) { const options = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "createUser", args, diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index d13c285914..5e470fbc6b 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -5,40 +5,46 @@ import { fetch } from 'meteor/fetch'; const hasOwn = Object.prototype.hasOwnProperty; // https://developers.google.com/accounts/docs/OAuth2Login#userinfocall -Google.whitelistedFields = ['id', 'email', 'verified_email', 'name', 'given_name', - 'family_name', 'picture', 'locale', 'timezone', 'gender']; +Google.whitelistedFields = [ + 'id', + 'email', + 'verified_email', + 'name', + 'given_name', + 'family_name', + 'picture', + 'locale', + 'timezone', + 'gender', +]; -const getServiceDataFromTokens = tokens => { +const getServiceDataFromTokens = async (tokens, callback) => { const { accessToken, idToken } = tokens; - const scopesCall = Meteor.wrapAsync(getScopes); - let scopes; - try { - scopes = scopesCall(accessToken); - } catch (err) { - throw Object.assign( + const scopes = await getScopes(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch tokeninfo from Google. ${err.message}`), { response: err.response } ); - } - const identityCall = Meteor.wrapAsync(getIdentity); - let identity; - try { - identity = identityCall(accessToken); - } catch (err) { - throw Object.assign( + callback && callback(error); + throw error; + }); + + let identity = await getIdentity(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch identity from Google. ${err.message}`), { response: err.response } ); - } + callback && callback(error); + throw error; + }); const serviceData = { accessToken, idToken, - scope: scopes + scope: scopes, }; - if (hasOwn.call(tokens, "expiresIn")) { - serviceData.expiresAt = - Date.now() + 1000 * parseInt(tokens.expiresIn, 10); + if (hasOwn.call(tokens, 'expiresIn')) { + serviceData.expiresAt = Date.now() + 1000 * parseInt(tokens.expiresIn, 10); } const fields = Object.create(null); @@ -56,22 +62,25 @@ const getServiceDataFromTokens = tokens => { if (tokens.refreshToken) { serviceData.refreshToken = tokens.refreshToken; } - - return { + const returnValue = { serviceData, options: { profile: { - name: identity.name - } - } + name: identity.name, + }, + }, }; + console.log({ returnValue }); + callback && callback(undefined, returnValue); + + return returnValue; }; -Accounts.registerLoginHandler(request => { +Accounts.registerLoginHandler(async (request) => { if (request.googleSignIn !== true) { return; } - + console.log({ request }); const tokens = { accessToken: request.accessToken, refreshToken: request.refreshToken, @@ -79,29 +88,38 @@ Accounts.registerLoginHandler(request => { }; if (request.serverAuthCode) { - Object.assign(tokens, getTokens({ - code: request.serverAuthCode - })); + Object.assign( + tokens, + await getTokens({ + code: request.serverAuthCode, + }) + ); } let result; try { - result = getServiceDataFromTokens(tokens); + result = await getServiceDataFromTokens(tokens); } catch (err) { throw Object.assign( - new Error(`Failed to complete OAuth handshake with Google. ${err.message}`), + new Error( + `Failed to complete OAuth handshake with Google. ${err.message}` + ), { response: err.response } ); } - - return Accounts.updateOrCreateUserFromExternalService("google", { - id: request.userId, - idToken: request.idToken, - accessToken: request.accessToken, - email: request.email, - picture: request.imageUrl, - ...result.serviceData, - }, result.options); + console.log({ result }); + return Accounts.updateOrCreateUserFromExternalService( + 'google', + { + id: request.userId, + idToken: request.idToken, + accessToken: request.accessToken, + email: request.email, + picture: request.imageUrl, + ...result.serviceData, + }, + result.options + ); }); // returns an object containing: @@ -109,45 +127,48 @@ Accounts.registerLoginHandler(request => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request const getTokens = async (query, callback) => { - const config = ServiceConfiguration.configurations.findOne({service: 'google'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({ + service: 'google', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); const content = new URLSearchParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('google', config), - grant_type: 'authorization_code' + grant_type: 'authorization_code', + }); + const request = await fetch('https://accounts.google.com/o/oauth2/token', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: content, }); - const request = await fetch( - "https://accounts.google.com/o/oauth2/token", { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: content, - }); const response = await request.json(); - if (response.error) { // if the http response was a json object with an error attribute - callback(response.error); - throw new Meteor.Error(`Failed to complete OAuth handshake with Google. ${response.error}`); + if (response.error) { + // if the http response was a json object with an error attribute + callback && callback(response.error); + throw new Meteor.Error( + `Failed to complete OAuth handshake with Google. ${response.error}` + ); } else { const data = { accessToken: response.access_token, refreshToken: response.refresh_token, expiresIn: response.expires_in, - idToken: response.id_token + idToken: response.id_token, }; - callback(undefined, data); + callback && callback(undefined, data); return data; } }; -const getTokensCall = Meteor.wrapAsync(getTokens); -const getServiceData = query => getServiceDataFromTokens(getTokensCall(query)); +const getServiceData = async (query) => + getServiceDataFromTokens(await getTokens(query)); OAuth.registerService('google', 2, null, getServiceData); @@ -159,14 +180,15 @@ const getIdentity = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/userinfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response); + callback && callback(undefined, response); return response; }; @@ -178,14 +200,15 @@ const getScopes = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/tokeninfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response.scope.split(' ')); + callback && callback(undefined, response.scope.split(' ')); return response.scope.split(' '); }; diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index eb54458825..8ad132c198 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -6,7 +6,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel Object.assign( redirectUrlObj.query, - whitelistedQueryParams.reduce((prev, param) => + whitelistedQueryParams.reduce((prev, param) => params.query[param] ? { ...prev, param: params.query[param] } : prev, {} ), @@ -25,7 +25,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel }; // connect middleware -OAuth._requestHandlers['1'] = (service, query, res) => { +OAuth._requestHandlers['1'] = async (service, query, res) => { const config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); if (! config) { throw new ServiceConfiguration.ConfigError(service.serviceName); diff --git a/packages/oauth2/oauth2_server.js b/packages/oauth2/oauth2_server.js index cf990d8691..86eead93ba 100644 --- a/packages/oauth2/oauth2_server.js +++ b/packages/oauth2/oauth2_server.js @@ -1,5 +1,5 @@ // connect middleware -OAuth._requestHandlers['2'] = (service, query, res) => { +OAuth._requestHandlers['2'] = async (service, query, res) => { let credentialSecret; // check if user authorized access @@ -7,7 +7,7 @@ OAuth._requestHandlers['2'] = (service, query, res) => { // Prepare the login results before returning. // Run service-specific handler. - const oauthResult = service.handleOauthRequest(query); + const oauthResult = await service.handleOauthRequest(query); credentialSecret = Random.secret(); const credentialToken = OAuth._credentialTokenFromQuery(query); From d0b5687b43d67b5c0785ed0079402d1574589c8f Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Mon, 22 Aug 2022 21:45:22 -0300 Subject: [PATCH 018/293] Changes requested by code review. Thank you @radekmie --- packages/email/email.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index a7183a9731..3ef97331ad 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -147,7 +147,7 @@ EmailTest.resetNextDevModeMailId = function () { nextDevModeMailId = 0; }; -const devModeSendAsync = async function (mail, stream) { +const devModeSendAsync = function (mail, stream) { return new Promise((resolve, reject) => { let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); @@ -305,7 +305,5 @@ Email.sendAsync = async function (options) { smtpSend(transport, email); return; } - return devModeSendAsync(email, stream).catch((err) => { - throw err; - }); + return devModeSendAsync(email, stream); }; From 0a21b597bc9ca820be19208c764e2063a6d2638c Mon Sep 17 00:00:00 2001 From: eduwr Date: Wed, 24 Aug 2022 06:12:36 -0300 Subject: [PATCH 019/293] convert github_server to async - remove wrapAsync from registerService method - remove callback calls on async methods --- packages/github-oauth/github_server.js | 29 ++++++++------------------ 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/packages/github-oauth/github_server.js b/packages/github-oauth/github_server.js index b71995d1c0..7b4f36f5f6 100644 --- a/packages/github-oauth/github_server.js +++ b/packages/github-oauth/github_server.js @@ -1,12 +1,9 @@ Github = {}; -OAuth.registerService('github', 2, null, (query) => { - const accessTokenCall = Meteor.wrapAsync(getAccessToken); - const accessToken = accessTokenCall(query); - const identityCall = Meteor.wrapAsync(getIdentity); - const identity = identityCall(accessToken); - const emailsCall = Meteor.wrapAsync(getEmails); - const emails = emailsCall(accessToken); +OAuth.registerService('github', 2, null, async (query) => { + const accessToken = await getAccessToken(query); + const identity = await getIdentity(accessToken); + const emails = await getEmails(accessToken); const primaryEmail = emails.find((email) => email.primary); return { @@ -31,7 +28,7 @@ OAuth.registerService('github', 2, null, (query) => { let userAgent = 'Meteor'; if (Meteor.release) userAgent += `/${Meteor.release}`; -const getAccessToken = async (query, callback) => { +const getAccessToken = async (query) => { const config = ServiceConfiguration.configurations.findOne({ service: 'github' }); @@ -68,18 +65,16 @@ const getAccessToken = async (query, callback) => { ); } if (response.error) { - callback(response.error); // if the http response was a json object with an error attribute throw new Error( `Failed to complete OAuth handshake with GitHub. ${response.error}` ); } else { - callback(null, response.access_token); return response.access_token; } }; -const getIdentity = async (accessToken, callback) => { +const getIdentity = async (accessToken) => { try { const request = await fetch('https://api.github.com/user', { method: 'GET', @@ -89,11 +84,8 @@ const getIdentity = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message); throw Object.assign( new Error(`Failed to fetch identity from Github. ${err.message}`), { response: err.response } @@ -101,7 +93,7 @@ const getIdentity = async (accessToken, callback) => { } }; -const getEmails = async (accessToken, callback) => { +const getEmails = async (accessToken) => { try { const request = await fetch('https://api.github.com/user/emails', { method: 'GET', @@ -111,11 +103,8 @@ const getEmails = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message, []); return []; } }; From 8b2b9dc398368774d8c9a781b65998b4cf03d003 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 24 Aug 2022 08:31:11 -0300 Subject: [PATCH 020/293] Return value from Email.customTransport. --- packages/email/email.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/email/email.js b/packages/email/email.js index 3ef97331ad..016d2a12c1 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -285,8 +285,7 @@ Email.sendAsync = async function (options) { if (Email.customTransport) { const packageSettings = Meteor.settings.packages?.email || {}; - Email.customTransport({ packageSettings, ...email }); - return; + return Email.customTransport({ packageSettings, ...email }); } const mailUrlEnv = process.env.MAIL_URL; From 01ccdb0d0d3a9af19c9b839973f28ccdcdf3ae29 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 24 Aug 2022 09:17:05 -0300 Subject: [PATCH 021/293] Change Oauth middleware to the async method. Changing tests to async because the current test flow capture data from mock data. --- packages/oauth/oauth_server.js | 4 ++-- packages/oauth1/oauth1_tests.js | 16 ++++++++-------- packages/oauth2/oauth2_tests.js | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 6d7b0cb578..ce2524349b 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -136,7 +136,7 @@ OAuth._checkRedirectUrlOrigin = redirectUrl => { ); }; -const middleware = (req, res, next) => { +const middleware = async (req, res, next) => { let requestData; // Make sure to catch any exceptions because otherwise we'd crash @@ -168,7 +168,7 @@ const middleware = (req, res, next) => { requestData = req.body; } - handler(service, requestData, res); + await handler(service, requestData, res); } catch (err) { // if we got thrown an error, save it off, it will get passed to // the appropriate login call (if any) and reported there. diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index a9f266af02..c8a65fa86e 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -1,7 +1,7 @@ import http from 'http'; import { OAuth1Binding } from './oauth1_binding'; -const testPendingCredential = (test, method) => { +const testPendingCredential = async (test, method) => { const twitterfooId = Random.id(); const twitterfooName = `nickname${Random.id()}`; const twitterfooAccessToken = Random.id(); @@ -71,7 +71,7 @@ const testPendingCredential = (test, method) => { respData += args[0]; return end.apply(this, arguments); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -94,17 +94,17 @@ const testPendingCredential = (test, method) => { } }; -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth2/oauth2_tests.js b/packages/oauth2/oauth2_tests.js index 1ce47813b4..49b94f4eb0 100644 --- a/packages/oauth2/oauth2_tests.js +++ b/packages/oauth2/oauth2_tests.js @@ -1,6 +1,6 @@ import http from 'http'; -const testPendingCredential = function (test, method) { +const testPendingCredential = async function (test, method) { const foobookId = Random.id(); const foobookOption1 = Random.id(); const credentialToken = Random.id(); @@ -51,7 +51,7 @@ const testPendingCredential = function (test, method) { return end.apply(this, args); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -72,17 +72,17 @@ const testPendingCredential = function (test, method) { } }; -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } From 7a6accc489365b5c61e1c22f28b6d62a77917fea Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 24 Aug 2022 21:53:06 -0300 Subject: [PATCH 022/293] Change accounts and oauth to use async for Meetup provider --- packages/meetup-oauth/meetup_server.js | 91 ++++++++++++++++---------- packages/meetup-oauth/package.js | 2 +- 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index cffa8da9e5..5aafbc0439 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -1,10 +1,10 @@ Meetup = {}; -OAuth.registerService('meetup', 2, null, query => { - const response = getAccessToken(query); +OAuth.registerService('meetup', 2, null, async query => { + const response = await getAccessToken(query); const accessToken = response.access_token; const expiresAt = (+new Date) + (1000 * response.expires_in); - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const { id, name, @@ -33,50 +33,71 @@ OAuth.registerService('meetup', 2, null, query => { }; }); -const getAccessToken = query => { +const toFormUrlencoded = data => { + return Object.entries(data) + .map(([key, value]) => `${key}=${value}`) + .join('&'); +}; + +const getAccessToken = async query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - grant_type: 'authorization_code', - redirect_uri: OAuth._redirectUri('meetup', config), - state: query.state - }}); - } catch (err) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), - { response: err.response } - ); - } + const bodyFormEncoded = toFormUrlencoded({ + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + grant_type: 'authorization_code', + redirect_uri: OAuth._redirectUri('meetup', config), + state: query.state + }); - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Meetup. ${response.data.error}`); - } else { - return response.data; - } + return await fetch('https://secure.meetup.com/oauth2/access', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body: bodyFormEncoded, + }) + .then(data => data.json()) + .then(data => { + if (data.error) { + throw new Error(`Failed to complete OAuth handshake with Meetup. ${data.error.message}`); + } + return data; + }) + .catch(err => { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), + { response: err.response }, + ); + }); }; -const getIdentity = accessToken => { - try { - const response = HTTP.get( - "https://api.meetup.com/2/members", - {params: {member_id: 'self', access_token: accessToken}}); - return response.data.results && response.data.results[0]; - } catch (err) { +const getIdentity = async accessToken => { + const bodyFormEncoded = toFormUrlencoded({ + member_id: 'self', + access_token: accessToken + }); + + return await fetch('https://api.meetup.com/2/members', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body: bodyFormEncoded, + }).then(data => data.json()) + .then(({results = []}) => results.length && results[0]) + .catch(err => { throw Object.assign( new Error(`Failed to fetch identity from Meetup. ${err.message}`), { response: err.response } ); - } + }); }; - Meetup.retrieveCredential = (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 83df9f74a3..f678cb4386 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -7,8 +7,8 @@ Package.onUse(api => { api.use('ecmascript'); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', 'server'); api.use('random', 'client'); + api.use('fetch', 'server'); api.use('service-configuration', ['client', 'server']); api.addFiles('meetup_server.js', 'server'); From ef508087bb923cf4c769efacfa845c5d6b14d27f Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Wed, 24 Aug 2022 22:28:24 -0300 Subject: [PATCH 023/293] Change accounts and oauth to use async for Meteor developer account --- .../meteor_developer_server.js | 128 ++++++++++-------- packages/meteor-developer-oauth/package.js | 2 +- 2 files changed, 70 insertions(+), 60 deletions(-) diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index c563ba47e8..0702508a33 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -1,7 +1,7 @@ -OAuth.registerService("meteor-developer", 2, null, query => { - const response = getTokens(query); +OAuth.registerService("meteor-developer", 2, null, async query => { + const response = await getTokens(query); const { accessToken } = response; - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const serviceData = { accessToken: OAuth.sealSecret(accessToken), @@ -23,74 +23,84 @@ OAuth.registerService("meteor-developer", 2, null, query => { }; }); +const toFormUrlencoded = data => { + return Object.entries(data) + .map(([key, value]) => `${key}=${value}`) + .join('&'); +}; + // returns an object containing: // - accessToken // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = query => { +const getTokens = async query => { const config = ServiceConfiguration.configurations.findOne({ - service: 'meteor-developer' + service: 'meteor-developer', }); - if (!config) + if (!config) { throw new ServiceConfiguration.ConfigError(); + } - let response; - try { - response = HTTP.post( - MeteorDeveloperAccounts._server + "/oauth2/token", { - params: { - grant_type: "authorization_code", - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('meteor-developer', config) - } + const bodyFormEncoded = toFormUrlencoded({ + grant_type: 'authorization_code', + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('meteor-developer', config), + }); + + return await fetch(MeteorDeveloperAccounts._server + '/oauth2/token', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body: bodyFormEncoded, + }) + .then(data => data.json()) + .then(data => { + if (data.error) { + throw new Error( + 'Failed to complete OAuth handshake with Meteor developer accounts. ' + + (data ? data.error : + 'No response data'), + ); } - ); - } catch (err) { - throw Object.assign( - new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " - + err.message - ), - {response: err.response} - ); - } - - if (! response.data || response.data.error) { - // if the http response was a json object with an error attribute - throw new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " + - (response.data ? response.data.error : - "No response data") - ); - } else { - return { - accessToken: response.data.access_token, - refreshToken: response.data.refresh_token, - expiresIn: response.data.expires_in - }; - } + return { + accessToken: data.access_token, + refreshToken: data.refresh_token, + expiresIn: data.expires_in, + }; + }) + .catch(err => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` + ), + { response: err.response }, + ); + }); }; -const getIdentity = accessToken => { - try { - return HTTP.get( - `${MeteorDeveloperAccounts._server}/api/v1/identity`, - { - headers: { Authorization: `Bearer ${accessToken}`} - } - ).data; - } catch (err) { - throw Object.assign( - new Error("Failed to fetch identity from Meteor developer accounts. " + - err.message), - {response: err.response} - ); - } +const getIdentity = async accessToken => { + return fetch( + `${MeteorDeveloperAccounts._server}/api/v1/identity`, + { + method: 'GET', + headers: { Authorization: `Bearer ${accessToken}` }, + }, + ) + .then(data => data.json()) + .catch(err => { + throw Object.assign( + new Error('Failed to fetch identity from Meteor developer accounts. ' + + err.message), + { response: err.response }, + ); + }); }; -MeteorDeveloperAccounts.retrieveCredential = - (credentialToken, credentialSecret) => +MeteorDeveloperAccounts.retrieveCredential = + (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index b1463542d5..112964d289 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -6,7 +6,7 @@ Package.describe({ Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); + api.use('fetch', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); From 009cbc4baad13de38624c666ab2d2c7cd29c2d17 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 25 Aug 2022 17:53:19 -0300 Subject: [PATCH 024/293] Change accounts and oauth to use async for Twitter account --- packages/oauth1/oauth1_binding.js | 101 +++++++++++++++++------ packages/oauth1/oauth1_server.js | 6 +- packages/oauth1/oauth1_tests.js | 8 +- packages/oauth1/package.js | 5 +- packages/twitter-oauth/twitter_server.js | 6 +- 5 files changed, 86 insertions(+), 40 deletions(-) diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index aab9629605..45bdb07f80 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -2,6 +2,14 @@ import crypto from 'crypto'; import querystring from 'querystring'; import urlModule from 'url'; +// TODO Create helper for use in all oauth packages + +const toFormUrlencoded = data => { + return Object.entries(data) + .map(([key, value]) => `${key}=${value}`) + .join('&'); +}; + // An OAuth1 wrapper around http calls which helps get tokens and // takes care of HTTP headers // @@ -19,12 +27,12 @@ export class OAuth1Binding { this._urls = urls; } - prepareRequestToken(callbackUrl) { + async prepareRequestToken(callbackUrl) { const headers = this._buildHeader({ oauth_callback: callbackUrl }); - const response = this._call('POST', this._urls.requestToken, headers); + const response = await this._call({method: 'POST', url: this._urls.requestToken, headers}); const tokens = querystring.parse(response.content); if (! tokens.oauth_callback_confirmed) @@ -35,7 +43,7 @@ export class OAuth1Binding { this.requestTokenSecret = tokens.oauth_token_secret; } - prepareAccessToken(query, requestTokenSecret) { + async prepareAccessToken(query, requestTokenSecret) { // support implementations that use request token secrets. This is // read by this._call. // @@ -50,7 +58,7 @@ export class OAuth1Binding { oauth_verifier: query.oauth_verifier }); - const response = this._call('POST', this._urls.accessToken, headers); + const response = await this._call({ method: 'POST', url: this._urls.accessToken, headers }); const tokens = querystring.parse(response.content); if (! tokens.oauth_token || ! tokens.oauth_token_secret) { @@ -66,7 +74,7 @@ export class OAuth1Binding { this.accessTokenSecret = tokens.oauth_token_secret; } - call(method, url, params, callback) { + async callAsync(method, url, params, callback) { const headers = this._buildHeader({ oauth_token: this.accessToken }); @@ -75,14 +83,29 @@ export class OAuth1Binding { params = {}; } - return this._call(method, url, headers, params, callback); + return this._call({ method, url, headers, params, callback }); + } + + async getAsync(url, params, callback) { + return this.callAsync('GET', url, params, callback); + } + + async postAsync(url, params, callback) { + return this.callAsync('POST', url, params, callback); + } + + call(method, url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. + return Promise.await(this.callAsync(method, url, params, callback)); } get(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('GET', url, params, callback); } post(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('POST', url, params, callback); } @@ -118,7 +141,7 @@ export class OAuth1Binding { return crypto.createHmac('SHA1', signingKey).update(signatureBase).digest('base64'); }; - _call(method, url, headers = {}, params = {}, callback) { + async _call({method, url, headers = {}, params = {}, callback}) { // all URLs to be functions to support parameters/customization if(typeof url === "function") { url = url(this); @@ -141,29 +164,55 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); - // Make signed request - try { - const response = HTTP.call(method, url, { - params, + return fetch( + method.toUpperCase() === 'POST' ? url : `${url}?${toFormUrlencoded(params)}`, + { + method, headers: { - Authorization: authString + Authorization: authString, + ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}), + }, + ...(method.toUpperCase() === 'POST' ? { body: toFormUrlencoded(params) } : {}), + } + ) + .then((res) => + res.text().then((content) => { + const responseHeaders = Array.from(res.headers.entries()).reduce( + (acc, [key, val]) => { + return { ...acc, [key.toLowerCase()]: val }; + }, + {} + ); + const data = responseHeaders['content-type'].includes('application/json') ? + JSON.parse(content) : undefined; + return { + content: data ? '' : content, + data, + headers: { ...responseHeaders, nonce: headers.oauth_nonce }, + redirected: res.redirected, + ok: res.ok, + statusCode: res.status, + }; + }) + ) + .then((response) => { + if (callback) { + callback(undefined, response); } - }, callback && ((error, response) => { - if (! error) { - response.nonce = headers.oauth_nonce; + return response; + }) + .catch((err) => { + if (callback) { + callback(err); } - callback(error, response); - })); - // We store nonce so that JWTs can be validated - if (response) - response.nonce = headers.oauth_nonce; - return response; - } catch (err) { - throw Object.assign(new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), - {response: err.response}); - } - }; + console.log({ err }); + throw Object.assign( + new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), + { response: err.response } + ); + }); + } _encodeHeader(header) { return Object.keys(header).reduce((memo, key) => { diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index 8ad132c198..d0c8e3732a 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -45,7 +45,7 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { }); // Get a request token to start auth process - oauthBinding.prepareRequestToken(callbackUrl); + await oauthBinding.prepareRequestToken(callbackUrl); // Keep track of request token so we can verify it on the next step OAuth._storeRequestToken( @@ -91,10 +91,10 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { // subsequent call to the `login` method will be immediate. // Get the access token for signing requests - oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); + await oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); // Run service-specific handler. - const oauthResult = service.handleOauthRequest( + const oauthResult = await service.handleOauthRequest( oauthBinding, { query: query }); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index c8a65fa86e..d4b283a97a 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -17,8 +17,8 @@ const testPendingCredential = async (test, method) => { authenticate: "https://example.com/oauth/authenticate" }; - OAuth1Binding.prototype.prepareRequestToken = () => {}; - OAuth1Binding.prototype.prepareAccessToken = function() { + OAuth1Binding.prototype.prepareRequestToken = async () => {}; + OAuth1Binding.prototype.prepareAccessToken = async function() { this.accessToken = twitterfooAccessToken; this.accessTokenSecret = twitterfooAccessTokenSecret; }; @@ -27,7 +27,7 @@ const testPendingCredential = async (test, method) => { try { // register a fake login service - OAuth.registerService(serviceName, 1, urls, query => ({ + OAuth.registerService(serviceName, 1, urls, async query => ({ serviceData: { id: twitterfooId, screenName: twitterfooName, @@ -100,7 +100,7 @@ Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (wi await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); await testPendingCredential(test, "GET"); diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 550fdc2448..dcbf9b4642 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -8,10 +8,7 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use([ - 'check', - 'http@1.4.4 || 2.0.0' - ], 'server'); + api.use(['check', 'fetch'], 'server'); api.use('mongo'); diff --git a/packages/twitter-oauth/twitter_server.js b/packages/twitter-oauth/twitter_server.js index d597f0db1e..393c3a3da3 100644 --- a/packages/twitter-oauth/twitter_server.js +++ b/packages/twitter-oauth/twitter_server.js @@ -15,9 +15,9 @@ var urls = { // https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials Twitter.whitelistedFields = ['profile_image_url', 'profile_image_url_https', 'lang', 'email']; -OAuth.registerService('twitter', 1, urls, function(oauthBinding) { - var identity = oauthBinding.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true').data; - +OAuth.registerService('twitter', 1, urls, async function(oauthBinding) { + const response = await oauthBinding.getAsync('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true'); + const { data: identity } = response; var serviceData = { id: identity.id_str, screenName: identity.screen_name, From 172caa7bf35b4f45f30858a30d9cb16b94264c10 Mon Sep 17 00:00:00 2001 From: eduwr Date: Thu, 25 Aug 2022 22:47:57 -0300 Subject: [PATCH 025/293] convert getTokenResponse method to async - use fetch instead of Meteor.HTTP method --- packages/facebook-oauth/facebook_server.js | 86 +++++++++++++--------- packages/facebook-oauth/package.js | 1 + 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index c2964cf842..7398e27470 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -1,6 +1,6 @@ Facebook = {}; import crypto from 'crypto'; -import { Accounts } from 'meteor/accounts-base'; +import {Accounts} from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; @@ -34,10 +34,10 @@ Accounts.registerLoginHandler(request => { return Accounts.updateOrCreateUserFromExternalService('facebook', facebookData.serviceData, facebookData.options); }); -OAuth.registerService('facebook', 2, null, query => { - const response = getTokenResponse(query); - const { accessToken } = response; - const { expiresIn } = response; +OAuth.registerService('facebook', 2, null, async query => { + const response = await getTokenResponse(query); + const {accessToken} = response; + const {expiresIn} = response; return Facebook.handleAuthFromAccessToken(accessToken, (+new Date) + (1000 * expiresIn)); }); @@ -61,50 +61,62 @@ function getAbsoluteUrlOptions(query) { } } -// returns an object containing: -// - accessToken -// - expiresIn: lifetime of token in seconds -const getTokenResponse = query => { +/** + * @typedef {Object} UserAccessToken + * @property {string} accessToken - User access Token + * @property {number} expiresIn - lifetime of token in seconds + */ +/** + * @async + * @function getTokenResponse + * @param {Object} query - An object with the code. + * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) + */ +const getTokenResponse = async query => { const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); if (!config) throw new ServiceConfiguration.ConfigError(); - let responseContent; try { - const absoluteUrlOptions = getAbsoluteUrlOptions(query); const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - // Request an access token - responseContent = HTTP.get( - `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { - params: { - client_id: config.appId, - redirect_uri: redirectUri, - client_secret: OAuth.openSecret(config.secret), - code: query.code - } - }).data; - } catch (err) { + + const params = new URLSearchParams(); + + params.append("client_id", config.appId) + params.append("redirect_uri", redirectUri) + params.append("client_secret", OAuth.openSecret(config.secret)) + params.append("code", query.code) + + const uri = `https://graph.facebook.com/v${API_VERSION}/oauth/access_token?${params.toString()}` + + const response = await fetch(uri, { + method: "GET", + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + }) + + const data = await response.json(); + + const fbAccessToken = data.access_token; + const fbExpires = data.expires_in; + + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; + } catch (e) { throw Object.assign( new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), - { response: err.response }, + {response: err.response}, ); } - - const fbAccessToken = responseContent.access_token; - const fbExpires = responseContent.expires_in; - - if (!fbAccessToken) { - throw new Error("Failed to complete OAuth handshake with facebook " + - `-- can't find access token in HTTP response. ${responseContent}`); - } - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; }; const getIdentity = (accessToken, fields) => { + console.log({accessToken}) const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); if (!config) throw new ServiceConfiguration.ConfigError(); @@ -115,6 +127,8 @@ const getIdentity = (accessToken, fields) => { hmac.update(accessToken); try { + + //Replace HTTP to fetch here return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { params: { access_token: accessToken, @@ -125,7 +139,7 @@ const getIdentity = (accessToken, fields) => { } catch (err) { throw Object.assign( new Error(`Failed to fetch identity from Facebook. ${err.message}`), - { response: err.response }, + {response: err.response}, ); } }; diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 67536065cb..79db14954c 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -8,6 +8,7 @@ Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('http@1.4.4 || 2.0.0', ['server']); + api.use('fetch', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); From 24845c482569ae22b5d0deabd62d49d15d30ffad Mon Sep 17 00:00:00 2001 From: eduwr Date: Thu, 25 Aug 2022 23:03:34 -0300 Subject: [PATCH 026/293] convert getIdentity method to async - use fetch instead of Meteor.HTTP method --- packages/facebook-oauth/facebook_server.js | 36 +++++++++++++--------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index 7398e27470..08dd582549 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -4,13 +4,13 @@ import {Accounts} from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; -Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { +Facebook.handleAuthFromAccessToken = async (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'middle_name', 'name_format', 'picture', 'short_name']; - const identity = getIdentity(accessToken, whitelisted); + const identity = await getIdentity(accessToken, whitelisted); const fields = {}; whitelisted.forEach(field => fields[field] = identity[field]); @@ -39,7 +39,7 @@ OAuth.registerService('facebook', 2, null, async query => { const {accessToken} = response; const {expiresIn} = response; - return Facebook.handleAuthFromAccessToken(accessToken, (+new Date) + (1000 * expiresIn)); + return await Facebook.handleAuthFromAccessToken(accessToken, (+new Date) + (1000 * expiresIn)); }); function getAbsoluteUrlOptions(query) { @@ -94,11 +94,10 @@ const getTokenResponse = async query => { method: "GET", headers: { Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', }, }) - const data = await response.json(); + const data = await response.json(); const fbAccessToken = data.access_token; const fbExpires = data.expires_in; @@ -115,8 +114,7 @@ const getTokenResponse = async query => { } }; -const getIdentity = (accessToken, fields) => { - console.log({accessToken}) +const getIdentity = async (accessToken, fields) => { const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); if (!config) throw new ServiceConfiguration.ConfigError(); @@ -128,14 +126,22 @@ const getIdentity = (accessToken, fields) => { try { - //Replace HTTP to fetch here - return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { - params: { - access_token: accessToken, - appsecret_proof: hmac.digest('hex'), - fields: fields.join(",") - } - }).data; + const params = new URLSearchParams(); + + params.append("access_token", accessToken) + params.append("appsecret_proof", hmac.digest('hex')) + params.append("fields", fields.join(",")) + + const uri = `https://graph.facebook.com/v${API_VERSION}/me?${params.toString()}` + + const response = await fetch(uri, { + method: "GET", + headers: { + Accept: 'application/json', + }, + }) + + return response.json(); } catch (err) { throw Object.assign( new Error(`Failed to fetch identity from Facebook. ${err.message}`), From 90e19a2f0713f50371f7b56df7417b7784ff2bb5 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 09:32:50 -0300 Subject: [PATCH 027/293] Change accounts and oauth to use async for Weibo account --- packages/oauth/oauth_server.js | 20 +++++++ packages/oauth/package.js | 1 + packages/weibo-oauth/package.js | 2 +- packages/weibo-oauth/weibo_server.js | 82 ++++++++++++++-------------- 4 files changed, 64 insertions(+), 41 deletions(-) diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index ce2524349b..9bad505320 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -473,3 +473,23 @@ OAuth.openSecrets = (serviceData, userId) => { ); return result; }; + +OAuth._fetch = async ( + url, + method = 'GET', + { headers = {}, queryParams = {}, body, ...options } = {} +) => { + const urlWithParams = new URL(url); + + Object.entries(queryParams).forEach(([key, value]) => { + urlWithParams.searchParams.set(key, `${value}`); + }); + + const requestOptions = { + method: method.toUpperCase(), + headers, + ...(body ? { body } : {}), + ...options, + }; + return fetch(urlWithParams.toString(), requestOptions); +}; diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8962aeb282..421be1d506 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -11,6 +11,7 @@ Package.onUse(api => { api.use(['reload', 'base64'], 'client'); api.use('oauth-encryption', 'server', {weak: true}); + api.use('fetch', 'server'); api.export('OAuth'); diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 02cea0b9c6..df3b3458f0 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -7,7 +7,7 @@ Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); - api.use('http@1.4.4 || 2.0.0', 'server'); + api.use('fetch', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); diff --git a/packages/weibo-oauth/weibo_server.js b/packages/weibo-oauth/weibo_server.js index 539022aa8d..24d56438fd 100644 --- a/packages/weibo-oauth/weibo_server.js +++ b/packages/weibo-oauth/weibo_server.js @@ -1,8 +1,8 @@ Weibo = {}; -OAuth.registerService('weibo', 2, null, query => { +OAuth.registerService('weibo', 2, null, async query => { - const response = getTokenResponse(query); + const response = await getTokenResponse(query); const uid = parseInt(response.uid, 10); // different parts of weibo's api seem to expect numbers, or strings @@ -11,7 +11,7 @@ OAuth.registerService('weibo', 2, null, query => { throw new Error(`Expected 'uid' to parse to an integer: ${JSON.stringify(response)}`); } - const identity = getIdentity(response.access_token, uid); + const identity = await getIdentity(response.access_token, uid); return { serviceData: { @@ -31,46 +31,48 @@ OAuth.registerService('weibo', 2, null, query => { // - uid // - access_token // - expires_in: lifetime of this token in seconds (5 years(!) right now) -const getTokenResponse = query => { - const config = ServiceConfiguration.configurations.findOne({service: 'weibo'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'weibo', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://api.weibo.com/oauth2/access_token", {params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('weibo', config, null, {replaceLocalhost: true}), - grant_type: 'authorization_code' - }}); - } catch (err) { - throw Object.assign(new Error(`Failed to complete OAuth handshake with Weibo. ${err.message}`), - {response: err.response}); - } - - // result.headers["content-type"] is 'text/plain;charset=UTF-8', so - // the http package doesn't automatically populate result.data - response.data = JSON.parse(response.content); - - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Weibo. ${response.data.error}`); - } else { - return response.data; - } + return OAuth._fetch('https://api.weibo.com/oauth2/access_token', 'POST', { + queryParams: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('weibo', config, null, { + replaceLocalhost: true, + }), + grant_type: 'authorization_code', + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Weibo. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = (accessToken, userId) => { - try { - return HTTP.get( - "https://api.weibo.com/2/users/show.json", - {params: {access_token: accessToken, uid: userId}}).data; - } catch (err) { - throw Object.assign(new Error("Failed to fetch identity from Weibo. " + err.message), - {response: err.response}); - } +const getIdentity = async (accessToken, userId) => { + return OAuth._fetch('https://api.weibo.com/2/users/show.json', 'GET', { + queryParams: { + access_token: accessToken, + uid: userId, + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error('Failed to fetch identity from Weibo. ' + err.message), + { response: err.response } + ); + }); }; Weibo.retrieveCredential = (credentialToken, credentialSecret) => From 16b2f47d1e7c2d7e3082975a9eb9eea484bc30d8 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 10:35:16 -0300 Subject: [PATCH 028/293] Create method Oauth._fetch to use in Oauth packages and centralize calls. --- .../meteor_developer_server.js | 62 +++++++++---------- packages/meteor-developer-oauth/package.js | 1 - packages/oauth/oauth_server.js | 14 ++++- packages/oauth1/oauth1_binding.js | 29 +++------ packages/oauth1/package.js | 2 +- packages/weibo-oauth/package.js | 1 - 6 files changed, 51 insertions(+), 58 deletions(-) diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index 0702508a33..57dd193ae1 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -23,18 +23,12 @@ OAuth.registerService("meteor-developer", 2, null, async query => { }; }); -const toFormUrlencoded = data => { - return Object.entries(data) - .map(([key, value]) => `${key}=${value}`) - .join('&'); -}; - // returns an object containing: // - accessToken // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = async query => { +const getTokens = async (query) => { const config = ServiceConfiguration.configurations.findOne({ service: 'meteor-developer', }); @@ -42,29 +36,31 @@ const getTokens = async query => { throw new ServiceConfiguration.ConfigError(); } - const bodyFormEncoded = toFormUrlencoded({ + const body = OAuth._addValuesToQueryParams({ grant_type: 'authorization_code', code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('meteor-developer', config), - }); + }).toString(); - return await fetch(MeteorDeveloperAccounts._server + '/oauth2/token', { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body: bodyFormEncoded, - }) - .then(data => data.json()) - .then(data => { + return OAuth._fetch( + MeteorDeveloperAccounts._server + '/oauth2/token', + 'POST', + { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + } + ) + .then((data) => data.json()) + .then((data) => { if (data.error) { throw new Error( 'Failed to complete OAuth handshake with Meteor developer accounts. ' + - (data ? data.error : - 'No response data'), + (data ? data.error : 'No response data') ); } return { @@ -73,30 +69,32 @@ const getTokens = async query => { expiresIn: data.expires_in, }; }) - .catch(err => { + .catch((err) => { throw Object.assign( new Error( `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` ), - { response: err.response }, + { response: err.response } ); }); }; -const getIdentity = async accessToken => { - return fetch( +const getIdentity = async (accessToken) => { + return OAuth._fetch( `${MeteorDeveloperAccounts._server}/api/v1/identity`, + 'GET', { - method: 'GET', headers: { Authorization: `Bearer ${accessToken}` }, - }, + } ) - .then(data => data.json()) - .catch(err => { + .then((data) => data.json()) + .catch((err) => { throw Object.assign( - new Error('Failed to fetch identity from Meteor developer accounts. ' + - err.message), - { response: err.response }, + new Error( + 'Failed to fetch identity from Meteor developer accounts. ' + + err.message + ), + { response: err.response } ); }); }; diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 112964d289..db38232d52 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -6,7 +6,6 @@ Package.describe({ Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('fetch', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 9bad505320..1b591a455b 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -474,6 +474,16 @@ OAuth.openSecrets = (serviceData, userId) => { return result; }; +OAuth._addValuesToQueryParams = ( + values = {}, + queryParams = new URLSearchParams() +) => { + Object.entries(values).forEach(([key, value]) => { + queryParams.set(key, `${value}`); + }); + return queryParams; +}; + OAuth._fetch = async ( url, method = 'GET', @@ -481,9 +491,7 @@ OAuth._fetch = async ( ) => { const urlWithParams = new URL(url); - Object.entries(queryParams).forEach(([key, value]) => { - urlWithParams.searchParams.set(key, `${value}`); - }); + OAuth._addValuesToQueryParams(queryParams, urlWithParams.searchParams); const requestOptions = { method: method.toUpperCase(), diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index 45bdb07f80..015553611e 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -2,14 +2,6 @@ import crypto from 'crypto'; import querystring from 'querystring'; import urlModule from 'url'; -// TODO Create helper for use in all oauth packages - -const toFormUrlencoded = data => { - return Object.entries(data) - .map(([key, value]) => `${key}=${value}`) - .join('&'); -}; - // An OAuth1 wrapper around http calls which helps get tokens and // takes care of HTTP headers // @@ -165,18 +157,15 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); // Make signed request - return fetch( - method.toUpperCase() === 'POST' ? url : `${url}?${toFormUrlencoded(params)}`, - { - method, - headers: { - Authorization: authString, - ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}), - }, - ...(method.toUpperCase() === 'POST' ? { body: toFormUrlencoded(params) } : {}), - } - ) - .then((res) => + return OAuth._fetch(url, method, { + headers: { + Authorization: authString, + ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}) + }, + ...(method.toUpperCase() === 'POST' ? + { body: OAuth._addValuesToQueryParams(params).toString() } + : { queryParams: params }) + }).then((res) => res.text().then((content) => { const responseHeaders = Array.from(res.headers.entries()).reduce( (acc, [key, val]) => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index dcbf9b4642..bb07c66774 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -8,7 +8,7 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use(['check', 'fetch'], 'server'); + api.use('check', 'server'); api.use('mongo'); diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index df3b3458f0..9ce2620c89 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -7,7 +7,6 @@ Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); - api.use('fetch', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); From de4b47b5c364c5f38c1a738595add68f48d47e80 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 10:41:13 -0300 Subject: [PATCH 029/293] Create method Oauth._fetch to use in Oauth packages and centralize calls. --- packages/meetup-oauth/meetup_server.js | 20 ++++++-------------- packages/meetup-oauth/package.js | 1 - 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index 5aafbc0439..bfc465c7b3 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -33,18 +33,12 @@ OAuth.registerService('meetup', 2, null, async query => { }; }); -const toFormUrlencoded = data => { - return Object.entries(data) - .map(([key, value]) => `${key}=${value}`) - .join('&'); -}; - const getAccessToken = async query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - const bodyFormEncoded = toFormUrlencoded({ + const body = OAuth._addValuesToQueryParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), @@ -53,13 +47,12 @@ const getAccessToken = async query => { state: query.state }); - return await fetch('https://secure.meetup.com/oauth2/access', { - method: 'POST', + return OAuth._fetch('https://secure.meetup.com/oauth2/access', 'POST', { headers: { Accept: 'application/json', 'Content-type': 'application/x-www-form-urlencoded', }, - body: bodyFormEncoded, + body, }) .then(data => data.json()) .then(data => { @@ -77,18 +70,17 @@ const getAccessToken = async query => { }; const getIdentity = async accessToken => { - const bodyFormEncoded = toFormUrlencoded({ + const body = OAuth._addValuesToQueryParams({ member_id: 'self', access_token: accessToken }); - return await fetch('https://api.meetup.com/2/members', { - method: 'POST', + return OAuth._fetch('https://api.meetup.com/2/members', 'POST', { headers: { Accept: 'application/json', 'Content-type': 'application/x-www-form-urlencoded', }, - body: bodyFormEncoded, + body, }).then(data => data.json()) .then(({results = []}) => results.length && results[0]) .catch(err => { diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f678cb4386..9691528e9f 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -8,7 +8,6 @@ Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); - api.use('fetch', 'server'); api.use('service-configuration', ['client', 'server']); api.addFiles('meetup_server.js', 'server'); From 99ad3711adf4d14ab10b784ab1e1573298a80dc7 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 13:59:46 -0300 Subject: [PATCH 030/293] Remove console log. --- packages/google-oauth/google_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index 5e470fbc6b..a25637be75 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -70,7 +70,7 @@ const getServiceDataFromTokens = async (tokens, callback) => { }, }, }; - console.log({ returnValue }); + callback && callback(undefined, returnValue); return returnValue; From 3ed86412d600124daa0931199ed58cdc4a70fef3 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 14:24:11 -0300 Subject: [PATCH 031/293] Using Oauth._fecth to call Facebook API. --- packages/facebook-oauth/facebook_server.js | 127 ++++++++++----------- packages/facebook-oauth/package.js | 2 - 2 files changed, 60 insertions(+), 69 deletions(-) diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index 08dd582549..2c5c3f4896 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -36,10 +36,10 @@ Accounts.registerLoginHandler(request => { OAuth.registerService('facebook', 2, null, async query => { const response = await getTokenResponse(query); - const {accessToken} = response; - const {expiresIn} = response; + const { accessToken } = response; + const { expiresIn } = response; - return await Facebook.handleAuthFromAccessToken(accessToken, (+new Date) + (1000 * expiresIn)); + return Facebook.handleAuthFromAccessToken(accessToken, (+new Date) + (1000 * expiresIn)); }); function getAbsoluteUrlOptions(query) { @@ -52,7 +52,7 @@ function getAbsoluteUrlOptions(query) { const redirectUrl = new URL(state.redirectUrl); return { rootUrl: redirectUrl.origin, - } + }; } catch (e) { console.error( `Failed to complete OAuth handshake with Facebook because it was not able to obtain the redirect url from the state and you are using overrideRootUrlFromStateRedirectUrl.`, e @@ -72,82 +72,75 @@ function getAbsoluteUrlOptions(query) { * @param {Object} query - An object with the code. * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) */ -const getTokenResponse = async query => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - try { - const absoluteUrlOptions = getAbsoluteUrlOptions(query); - const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); + const absoluteUrlOptions = getAbsoluteUrlOptions(query); + const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - const params = new URLSearchParams(); - - params.append("client_id", config.appId) - params.append("redirect_uri", redirectUri) - params.append("client_secret", OAuth.openSecret(config.secret)) - params.append("code", query.code) - - const uri = `https://graph.facebook.com/v${API_VERSION}/oauth/access_token?${params.toString()}` - - const response = await fetch(uri, { - method: "GET", - headers: { - Accept: 'application/json', + return OAuth._fetch( + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, + 'GET', + { + queryParams: { + client_id: config.appId, + redirect_uri: redirectUri, + client_secret: OAuth.openSecret(config.secret), + code: query.code, }, + } + ) + .then((res) => res.json()) + .then(data => { + const fbAccessToken = data.access_token; + const fbExpires = data.expires_in; + if (!fbAccessToken) { + throw new Error("Failed to complete OAuth handshake with facebook " + + `-- can't find access token in HTTP response. ${data}`); + } + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; }) - - const data = await response.json(); - - const fbAccessToken = data.access_token; - const fbExpires = data.expires_in; - - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; - } catch (e) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), - {response: err.response}, - ); - } + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Facebook. ${err.message}` + ), + { response: err.response } + ); + }); }; const getIdentity = async (accessToken, fields) => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); // Generate app secret proof that is a sha256 hash of the app access token, with the app secret as the key // https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof const hmac = crypto.createHmac('sha256', OAuth.openSecret(config.secret)); hmac.update(accessToken); - try { - - const params = new URLSearchParams(); - - params.append("access_token", accessToken) - params.append("appsecret_proof", hmac.digest('hex')) - params.append("fields", fields.join(",")) - - const uri = `https://graph.facebook.com/v${API_VERSION}/me?${params.toString()}` - - const response = await fetch(uri, { - method: "GET", - headers: { - Accept: 'application/json', - }, - }) - - return response.json(); - } catch (err) { - throw Object.assign( - new Error(`Failed to fetch identity from Facebook. ${err.message}`), - {response: err.response}, - ); - } + return OAuth._fetch(`https://graph.facebook.com/v${API_VERSION}/me`, 'GET', { + queryParams: { + access_token: accessToken, + appsecret_proof: hmac.digest('hex'), + fields: fields.join(','), + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error(`Failed to fetch identity from Facebook. ${err.message}`), + { response: err.response } + ); + }); }; Facebook.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 79db14954c..de073e9b0c 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -7,8 +7,6 @@ Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); - api.use('fetch', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); From 68a5e66435cb92cd085411201648ca13afc1a6b2 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 15:37:19 -0300 Subject: [PATCH 032/293] Changing accounts-password to no more use Meteor.wrapAsync. --- packages/accounts-password/password_server.js | 101 +++++++++++------- packages/accounts-password/password_tests.js | 4 +- 2 files changed, 62 insertions(+), 43 deletions(-) diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index 75c7c30e0c..c5852493f8 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,8 +1,5 @@ -import bcrypt from 'bcrypt' -import {Accounts} from "meteor/accounts-base"; - -const bcryptHash = Meteor.wrapAsync(bcrypt.hash); -const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); +import bcrypt from 'bcrypt'; +import { Accounts } from "meteor/accounts-base"; // Utility for grabbing user const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); @@ -48,9 +45,9 @@ const getPasswordString = password => { // SHA256 before bcrypt) or an object with properties `digest` and // `algorithm` (in which case we bcrypt `password.digest`). // -const hashPassword = password => { +const hashPassword = async password => { password = getPasswordString(password); - return bcryptHash(password, Accounts._bcryptRounds()); + return await bcrypt.hash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -74,7 +71,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -Accounts._checkPassword = (user, password) => { +const checkPassword = async (user, password) => { const result = { userId: user._id }; @@ -83,15 +80,16 @@ Accounts._checkPassword = (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! bcryptCompare(formattedPassword, hash)) { + if (! await bcrypt.compare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. - Meteor.defer(() => { + + Meteor.defer(async () => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - bcryptHash(formattedPassword, Accounts._bcryptRounds()) + await bcrypt.hash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -99,7 +97,8 @@ Accounts._checkPassword = (user, password) => { return result; }; -const checkPassword = Accounts._checkPassword; + +Accounts._checkPassword = checkPassword; /// /// LOGIN @@ -163,7 +162,7 @@ const passwordValidator = Match.OneOf( // // Note that neither password option is secure without SSL. // -Accounts.registerLoginHandler("password", options => { +Accounts.registerLoginHandler("password", async options => { if (!options.password) return undefined; // don't handle @@ -188,7 +187,7 @@ Accounts.registerLoginHandler("password", options => { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, options.password); + const result = await checkPassword(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -258,7 +257,7 @@ Accounts.setUsername = (userId, newUsername) => { // Let the user change their own password if they know the old // password. `oldPassword` and `newPassword` should be objects with keys // `digest` and `algorithm` (representing the SHA256 of the password). -Meteor.methods({changePassword: function (oldPassword, newPassword) { +Meteor.methods({changePassword: async function (oldPassword, newPassword) { check(oldPassword, passwordValidator); check(newPassword, passwordValidator); @@ -278,12 +277,12 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, oldPassword); + const result = await checkPassword(user, oldPassword); if (result.error) { throw result.error; } - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // It would be better if this removed ALL existing tokens and replaced // the token for the current connection with a new one, but that would @@ -317,9 +316,9 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { * @importFromPackage accounts-base */ Accounts.setPassword = (userId, newPlaintextPassword, options) => { - check(userId, String) - check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)) - check(options, Match.Maybe({ logout: Boolean })) + check(userId, String); + check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); + check(options, Match.Maybe({ logout: Boolean })); options = { logout: true , ...options }; const user = getUserById(userId, {fields: {_id: 1}}); @@ -327,18 +326,20 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { throw new Meteor.Error(403, "User not found"); } - const update = { - $unset: { - 'services.password.reset': 1 - }, - $set: {'services.password.bcrypt': hashPassword(newPlaintextPassword)} - }; + return hashPassword(newPlaintextPassword).then(hash => { + const update = { + $unset: { + 'services.password.reset': 1 + }, + $set: {'services.password.bcrypt': hash} + }; - if (options.logout) { - update.$unset['services.resume.loginTokens'] = 1; - } + if (options.logout) { + update.$unset['services.resume.loginTokens'] = 1; + } - Meteor.users.update({_id: user._id}, update); + Meteor.users.update({_id: user._id}, update); + }); }; @@ -568,7 +569,7 @@ Meteor.methods({resetPassword: async function (...args) { "resetPassword", args, "password", - () => { + async () => { check(token, String); check(newPassword, passwordValidator); @@ -617,7 +618,7 @@ Meteor.methods({resetPassword: async function (...args) { error: new Meteor.Error(403, "Token has invalid email address") }; - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be // logged in as. Make sure to avoid logging ourselves out if this @@ -888,7 +889,7 @@ Accounts.removeEmail = (userId, email) => { // does the actual user insertion. // // returns the user id -const createUser = options => { +const createUser = async options => { // Unknown keys allowed, because a onCreateUserHook can take arbitrary // options. check(options, Match.ObjectIncluding({ @@ -903,11 +904,11 @@ const createUser = options => { const user = {services: {}}; if (password) { - const hashed = hashPassword(password); + const hashed = await hashPassword(password); user.services.password = { bcrypt: hashed }; } - return Accounts._createUserCheckingDuplicates({ user, email, username, options }) + return Accounts._createUserCheckingDuplicates({ user, email, username, options }); }; // method for create user. Requests come from the client. @@ -918,7 +919,7 @@ Meteor.methods({createUser: async function (...args) { "createUser", args, "password", - () => { + async () => { // createUser() above does more checking. check(options, Object); if (Accounts._options.forbidClientAccountCreation) @@ -926,7 +927,7 @@ Meteor.methods({createUser: async function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - const userId = Accounts.createUserVerifyingEmail(options); + const userId = await Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -948,10 +949,10 @@ Meteor.methods({createUser: async function (...args) { * @param {Object} options.profile The user's profile, typically including the `name` field. * @importFromPackage accounts-base * */ -Accounts.createUserVerifyingEmail = (options) => { +Accounts.createUserVerifyingEmail = async (options) => { options = { ...options }; // Create user. result contains id and token. - const userId = createUser(options); + const userId = await createUser(options); // safety belt. createUser is supposed to throw on error. send 500 error // instead of sending a verification email with empty userid. if (! userId) @@ -976,14 +977,15 @@ Accounts.createUserVerifyingEmail = (options) => { // Unlike the client version, this does not log you in as this user // after creation. // -// returns userId or throws an error if it can't create +// returns Promise or throws an error if it can't create // // XXX add another argument ("server options") that gets sent to onCreateUser, // which is always empty when called from the createUser method? eg, "admin: // true", which we want to prevent the client from setting, but which a custom // method calling Accounts.createUser could set? // -Accounts.createUser = (options, callback) => { + +Accounts.createUserAsync = async (options, callback) => { options = { ...options }; // XXX allow an optional callback? @@ -994,6 +996,23 @@ Accounts.createUser = (options, callback) => { return createUser(options); }; +// Create user directly on the server. +// +// Unlike the client version, this does not log you in as this user +// after creation. +// +// returns userId or throws an error if it can't create +// +// XXX add another argument ("server options") that gets sent to onCreateUser, +// which is always empty when called from the createUser method? eg, "admin: +// true", which we want to prevent the client from setting, but which a custom +// method calling Accounts.createUser could set? +// + +Accounts.createUser = (options, callback) => { + return Promise.await(Accounts.createUserAsync(options, callback)); +}; + /// /// PASSWORD-SPECIFIC INDEXES ON USERS /// diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 23e7e6ca8c..033c988101 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1747,7 +1747,7 @@ if (Meteor.isServer) (() => { Tinytest.addAsync( 'passwords - allow custom bcrypt rounds', - (test, done) => { + async (test, done) => { const getUserHashRounds = user => Number(user.services.password.bcrypt.substring(4, 6)); @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - Accounts._checkPassword(user1, password); + await Accounts._checkPassword(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); From d08790778a984e28ac73d81a5f42cd366b82ceb0 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 15:53:40 -0300 Subject: [PATCH 033/293] Changing accounts-password to no more use Meteor.wrapAsync. --- packages/accounts-password/password_server.js | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index c5852493f8..fb11d51a05 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,4 +1,4 @@ -import bcrypt from 'bcrypt'; +import { hash as bcryptHash, compare as bcryptCompare } from 'bcrypt'; import { Accounts } from "meteor/accounts-base"; // Utility for grabbing user @@ -47,7 +47,7 @@ const getPasswordString = password => { // const hashPassword = async password => { password = getPasswordString(password); - return await bcrypt.hash(password, Accounts._bcryptRounds()); + return await bcryptHash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -80,7 +80,7 @@ const checkPassword = async (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! await bcrypt.compare(formattedPassword, hash)) { + if (! await bcryptCompare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. @@ -89,7 +89,7 @@ const checkPassword = async (user, password) => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - await bcrypt.hash(formattedPassword, Accounts._bcryptRounds()) + await bcryptHash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -315,7 +315,7 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { * @param {Object} options.logout Logout all current connections with this userId (default: true) * @importFromPackage accounts-base */ -Accounts.setPassword = (userId, newPlaintextPassword, options) => { +Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { check(userId, String); check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); check(options, Match.Maybe({ logout: Boolean })); @@ -326,20 +326,31 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { throw new Meteor.Error(403, "User not found"); } - return hashPassword(newPlaintextPassword).then(hash => { - const update = { - $unset: { - 'services.password.reset': 1 - }, - $set: {'services.password.bcrypt': hash} - }; + const update = { + $unset: { + 'services.password.reset': 1 + }, + $set: {'services.password.bcrypt': await hashPassword(newPlaintextPassword)} + }; - if (options.logout) { - update.$unset['services.resume.loginTokens'] = 1; - } + if (options.logout) { + update.$unset['services.resume.loginTokens'] = 1; + } - Meteor.users.update({_id: user._id}, update); - }); + Meteor.users.update({_id: user._id}, update); +}; + +/** + * @summary Forcibly change the password for a user. + * @locus Server + * @param {String} userId The id of the user to update. + * @param {String} newPassword A new password for the user. + * @param {Object} [options] + * @param {Object} options.logout Logout all current connections with this userId (default: true) + * @importFromPackage accounts-base + */ +Accounts.setPassword = (userId, newPlaintextPassword, options) => { + return Promise.await(Accounts.setPasswordAsync(userId, newPlaintextPassword, options)); }; From cd55c0f5d14cd778433f209a88fa05d0b00b50c2 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 16:09:24 -0300 Subject: [PATCH 034/293] Create API doc. --- docs/source/api/email.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/source/api/email.md b/docs/source/api/email.md index e801e6a709..0e822ab2c9 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -83,6 +83,27 @@ Meteor.call( 'This is a test of Email.send.' ); ``` +{% apibox "Email.sendAsync" %} + +`sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. + +```js +// Server: Define a method that the client can call. +Meteor.methods({ + sendEmail(to, from, subject, text) { + // Make sure that all arguments are strings. + check([to, from, subject, text], [String]); + + // Let other method calls from the same client start running, without + // waiting for the email sending to complete. + this.unblock(); + + Email.sendAsync({ to, from, subject, text }).catch(err => { + // + }); + } +}); +``` {% apibox "Email.hookSend" %} From 9149cad069adc78dbe71d75197dae67b1adfa7ee Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Fri, 26 Aug 2022 16:11:32 -0300 Subject: [PATCH 035/293] Remove TODO --- packages/email/email.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/email/email.js b/packages/email/email.js index 016d2a12c1..1029e13156 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -235,7 +235,6 @@ Email.send = function (options) { Promise.await(Email.sendAsync(options)); }; -// TODO Rewrite summary. /** * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server * or if mail server returns an error. All fields should match From 03b776933bbcebf3f63d856585ad2a01c0163429 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 4 Sep 2022 17:02:17 +0200 Subject: [PATCH 036/293] Start moving OAuth stuff out of accounts-base --- packages/accounts-base/accounts_common.js | 34 -------- packages/accounts-base/accounts_server.js | 94 ---------------------- packages/accounts-base/package.js | 4 - packages/accounts-oauth/oauth_common.js | 36 +++++++++ packages/accounts-oauth/oauth_server.js | 96 +++++++++++++++++++++++ packages/accounts-oauth/package.js | 5 ++ 6 files changed, 137 insertions(+), 132 deletions(-) diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..01af031e48 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,40 +79,6 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; - - // loginServiceConfiguration and ConfigError are maintained for backwards compatibility - Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - this.loginServiceConfiguration = ServiceConfiguration.configurations; - this.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - 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 configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - this._options[key] = settings[key]; - } - }); - } - }); } /** diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 9088bbbea9..7e8d18ee86 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -76,9 +76,6 @@ export class AccountsServer extends AccountsCommon { setExpireTokensInterval(this); this._validateLoginHook = new Hook({ bindEnvironment: false }); - this._validateNewUserHooks = [ - defaultValidateNewUserHook.bind(this) - ]; this._deleteSavedTokensForAllUsersOnStartup(); @@ -1684,66 +1681,6 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); -}; - -// OAuth service data is temporarily stored in the pending credentials -// collection during the oauth authentication process. Sensitive data -// such as access tokens are encrypted without the user id because -// we don't know the user id yet. We re-encrypt these fields with the -// user id included when storing the service data permanently in -// the users collection. -// -const pinEncryptedFieldsToUser = (serviceData, userId) => { - Object.keys(serviceData).forEach(key => { - let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) - value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); - serviceData[key] = value; - }); -}; - - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); - // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { @@ -1752,37 +1689,6 @@ const defaultCreateUserHook = (options, user) => { return user; }; -// Validate new user's email or Google/Facebook/GitHub account's email -function defaultValidateNewUserHook(user) { - const domain = this._options.restrictCreationByEmailDomain; - if (!domain) { - return true; - } - - let emailIsGood = false; - if (user.emails && user.emails.length > 0) { - emailIsGood = user.emails.reduce( - (prev, email) => prev || this._testEmailDomain(email.address), false - ); - } else if (user.services && Object.values(user.services).length > 0) { - // Find any email of any service and check it - emailIsGood = Object.values(user.services).reduce( - (prev, service) => service.email && this._testEmailDomain(service.email), - false, - ); - } - - if (emailIsGood) { - return true; - } - - if (typeof domain === 'string') { - throw new Meteor.Error(403, `@${domain} email required`); - } else { - throw new Meteor.Error(403, "Email doesn't match the criteria."); - } -} - const setupUsersCollection = users => { /// /// RESTRICTING WRITES TO USER OBJECTS diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 32a6df946c..c6e303c499 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -15,10 +15,6 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index e0e1a1ad48..734570ecd8 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + Accounts.oauth = {}; const services = {}; @@ -31,3 +33,37 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); + +// loginServiceConfiguration and ConfigError are maintained for backwards compatibility +Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; + Accounts.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + 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 configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + Accounts._options[key] = settings[key]; + } + }); + } +}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index c76b2e439b..cbf4909be4 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -55,3 +57,97 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); + +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = + Package["oauth-encryption"] && + Package["oauth-encryption"].OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption && OAuthEncryption.keyIsLoaded(); +}; + +// OAuth service data is temporarily stored in the pending credentials +// collection during the oauth authentication process. Sensitive data +// such as access tokens are encrypted without the user id because +// we don't know the user id yet. We re-encrypt these fields with the +// user id included when storing the service data permanently in +// the users collection. +// +const pinEncryptedFieldsToUser = (serviceData, userId) => { + Object.keys(serviceData).forEach(key => { + let value = serviceData[key]; + if (OAuthEncryption && OAuthEncryption.isSealed(value)) + value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); + serviceData[key] = value; + }); +}; + +// Validate new user's email or Google/Facebook/GitHub account's email +function defaultValidateNewUserHook(user) { + const domain = this._options.restrictCreationByEmailDomain; + if (!domain) { + return true; + } + + let emailIsGood = false; + if (user.emails && user.emails.length > 0) { + emailIsGood = user.emails.reduce( + (prev, email) => prev || this._testEmailDomain(email.address), false + ); + } else if (user.services && Object.values(user.services).length > 0) { + // Find any email of any service and check it + emailIsGood = Object.values(user.services).reduce( + (prev, service) => service.email && this._testEmailDomain(service.email), + false, + ); + } + + if (emailIsGood) { + return true; + } + + if (typeof domain === 'string') { + throw new Meteor.Error(403, `@${domain} email required`); + } else { + throw new Meteor.Error(403, "Email doesn't match the criteria."); + } +} + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + Accounts._validateNewUserHooks = [ + defaultValidateNewUserHook.bind(this) + ]; + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f20513769d..f346b8a1e4 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -9,6 +9,11 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); + + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + api.use('oauth'); api.addFiles('oauth_common.js'); From 43077687e3f61479f00b9408d84bdba8b3276304 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Tue, 20 Sep 2022 10:54:55 -0300 Subject: [PATCH 037/293] Preserve compatibility mode for account method `Accounts._checkPassword` --- packages/accounts-password/password_server.js | 11 ++++++++--- packages/accounts-password/password_tests.js | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index fb11d51a05..812bf848d1 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -71,7 +71,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -const checkPassword = async (user, password) => { +const checkPasswordAsync = async (user, password) => { const result = { userId: user._id }; @@ -98,7 +98,12 @@ const checkPassword = async (user, password) => { return result; }; +const checkPassword = async (user, password) => { + return Promise.await(checkPasswordAsync(user, password)); +}; + Accounts._checkPassword = checkPassword; +Accounts._checkPasswordAsync = checkPasswordAsync; /// /// LOGIN @@ -187,7 +192,7 @@ Accounts.registerLoginHandler("password", async options => { Accounts._handleError("User has no password set"); } - const result = await checkPassword(user, options.password); + const result = await checkPasswordAsync(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -277,7 +282,7 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = await checkPassword(user, oldPassword); + const result = await checkPasswordAsync(user, oldPassword); if (result.error) { throw result.error; } diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 033c988101..0266c977f2 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - await Accounts._checkPassword(user1, password); + await Accounts._checkPasswordAsync(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); From efbffc95f00d3873583314458ea73ab664c6f31c Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Thu, 22 Sep 2022 09:09:22 -0300 Subject: [PATCH 038/293] Changes by code review. --- packages/accounts-base/accounts_server.js | 2 +- packages/facebook-oauth/facebook_server.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index fea56b222a..10120614b4 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -588,7 +588,7 @@ export class AccountsServer extends AccountsCommon { // return `undefined`, meaning it handled this call to `login`. Return // that return value. async _runLoginHandlers(methodInvocation, options) { - for await (let handler of this._loginHandlers) { + for (let handler of this._loginHandlers) { const result = await tryLoginMethod(handler.name, async () => await handler.handler.call(methodInvocation, options) ); diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index 2c5c3f4896..d9c824f27f 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -1,6 +1,6 @@ Facebook = {}; import crypto from 'crypto'; -import {Accounts} from 'meteor/accounts-base'; +import { Accounts } from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; From 1cb299f840a593e47c78ba1c7a5e4fc9851872bb Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Tue, 27 Sep 2022 17:27:09 -0300 Subject: [PATCH 039/293] Changes suggested in code review - Include return on sendAsync example; - Change method send (sync) to preserve current behavior using the `customTransport` option. --- docs/source/api/email.md | 2 +- packages/email/email.js | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 0e822ab2c9..23884f65ac 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -98,7 +98,7 @@ Meteor.methods({ // waiting for the email sending to complete. this.unblock(); - Email.sendAsync({ to, from, subject, text }).catch(err => { + return Email.sendAsync({ to, from, subject, text }).catch(err => { // }); } diff --git a/packages/email/email.js b/packages/email/email.js index 1029e13156..4a26bca89b 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -147,7 +147,8 @@ EmailTest.resetNextDevModeMailId = function () { nextDevModeMailId = 0; }; -const devModeSendAsync = function (mail, stream) { +const devModeSendAsync = function (mail, options) { + const stream = options?.stream || process.stdout; return new Promise((resolve, reject) => { let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); @@ -225,14 +226,17 @@ Email.customTransport = undefined; * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * @param {Object} [options.stream] Output stream to write email on development environment * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ Email.send = function (options) { + if (Email.customTransport) { + // Don't wait for sending process. Preserve current behavior + return Email.sendAsync(options); + } // Using Fibers Promise.await - Promise.await(Email.sendAsync(options)); + return Promise.await(Email.sendAsync(options)); }; /** @@ -264,14 +268,13 @@ Email.send = function (options) { * @param {Object[]} [options.attachments] Array of attachment objects, as * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * @param {Object} [options.stream] Output stream to write email on development environment * object representing the message to be sent. Overrides all other options. * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ Email.sendAsync = async function (options) { - const { stream = process.stdout, ...rest } = options; - const email = rest.mailComposer ? rest.mailComposer.mail : rest; + + const email = options.mailComposer ? options.mailComposer.mail : options; let send = true; sendHooks.forEach((hook) => { @@ -303,5 +306,5 @@ Email.sendAsync = async function (options) { smtpSend(transport, email); return; } - return devModeSendAsync(email, stream); + return devModeSendAsync(email, options); }; From b0856ba1701c14f2a73ff0c34c7cca3c6195e47a Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sat, 1 Oct 2022 16:53:45 +0200 Subject: [PATCH 040/293] Fix things up Fix tests and move few things back. --- docs/history.md | 12 ++++ packages/accounts-base/accounts_common.js | 4 +- packages/accounts-base/accounts_server.js | 62 ++++++++++++++++++- packages/accounts-oauth/oauth_common.js | 19 ++++++ packages/accounts-oauth/oauth_server.js | 57 +---------------- .../promise/.npm/package/npm-shrinkwrap.json | 6 +- 6 files changed, 96 insertions(+), 64 deletions(-) diff --git a/docs/history.md b/docs/history.md index e20218863c..4ab2f2fc1f 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,15 @@ +## NEXT, 2022-XX-XX + +### Highlights + +#### Breaking Changes +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + +#### Migration Steps + +#### Meteor Version Release + + ## 2.7.3, 2022-05-31 #### Highlights diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index 01af031e48..dfd41f0e1e 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -230,6 +230,7 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { 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}`); } }); @@ -396,9 +397,6 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes -// how long we wait before logging out clients when Meteor.logoutOtherClients is -// called -export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 7e8d18ee86..e9dbca524c 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,4 +1,5 @@ import crypto from 'crypto'; +import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -76,6 +77,9 @@ export class AccountsServer extends AccountsCommon { setExpireTokensInterval(this); this._validateLoginHook = new Hook({ bindEnvironment: false }); + this._validateNewUserHooks = [ + defaultValidateNewUserHook.bind(this) + ]; this._deleteSavedTokensForAllUsersOnStartup(); @@ -727,7 +731,8 @@ export class AccountsServer extends AccountsCommon { if (ServiceConfiguration.configurations.findOne({service: options.service})) throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) options.secret = OAuthEncryption.seal(options.secret); ServiceConfiguration.configurations.insert(options); @@ -755,8 +760,10 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + } }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1681,6 +1688,24 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; + +// OAuth service data is temporarily stored in the pending credentials +// collection during the oauth authentication process. Sensitive data +// such as access tokens are encrypted without the user id because +// we don't know the user id yet. We re-encrypt these fields with the +// user id included when storing the service data permanently in +// the users collection. +// +const pinEncryptedFieldsToUser = (serviceData, userId) => { + Object.keys(serviceData).forEach(key => { + let value = serviceData[key]; + if (OAuthEncryption?.isSealed(value)) + value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); + serviceData[key] = value; + }); +}; + // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { @@ -1689,6 +1714,37 @@ const defaultCreateUserHook = (options, user) => { return user; }; +// Validate new user's email or Google/Facebook/GitHub account's email +function defaultValidateNewUserHook(user) { + const domain = this._options.restrictCreationByEmailDomain; + if (!domain) { + return true; + } + + let emailIsGood = false; + if (user.emails && user.emails.length > 0) { + emailIsGood = user.emails.reduce( + (prev, email) => prev || this._testEmailDomain(email.address), false + ); + } else if (user.services && Object.values(user.services).length > 0) { + // Find any email of any service and check it + emailIsGood = Object.values(user.services).reduce( + (prev, service) => service.email && this._testEmailDomain(service.email), + false, + ); + } + + if (emailIsGood) { + return true; + } + + if (typeof domain === 'string') { + throw new Meteor.Error(403, `@${domain} email required`); + } else { + throw new Meteor.Error(403, "Email doesn't match the criteria."); + } +} + const setupUsersCollection = users => { /// /// RESTRICTING WRITES TO USER OBJECTS diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index 734570ecd8..bfb99b0a5d 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,5 +1,24 @@ import { Meteor } from 'meteor/meteor'; +// TODO get from account-base +// config option keys +const VALID_CONFIG_KEYS = [ + 'sendVerificationEmail', + 'forbidClientAccountCreation', + 'passwordEnrollTokenExpiration', + 'passwordEnrollTokenExpirationInDays', + 'restrictCreationByEmailDomain', + 'loginExpirationInDays', + 'loginExpiration', + 'passwordResetTokenExpirationInDays', + 'passwordResetTokenExpiration', + 'ambiguousErrorMessages', + 'bcryptRounds', + 'defaultFieldSelector', + 'loginTokenExpirationHours', + 'tokenSequenceLength', +]; + Accounts.oauth = {}; const services = {}; diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index cbf4909be4..f8d67eff25 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -62,61 +62,12 @@ Accounts.registerLoginHandler(options => { /// OAuth Encryption Support /// -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); + return OAuthEncryption?.keyIsLoaded(); }; -// OAuth service data is temporarily stored in the pending credentials -// collection during the oauth authentication process. Sensitive data -// such as access tokens are encrypted without the user id because -// we don't know the user id yet. We re-encrypt these fields with the -// user id included when storing the service data permanently in -// the users collection. -// -const pinEncryptedFieldsToUser = (serviceData, userId) => { - Object.keys(serviceData).forEach(key => { - let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) - value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); - serviceData[key] = value; - }); -}; - -// Validate new user's email or Google/Facebook/GitHub account's email -function defaultValidateNewUserHook(user) { - const domain = this._options.restrictCreationByEmailDomain; - if (!domain) { - return true; - } - - let emailIsGood = false; - if (user.emails && user.emails.length > 0) { - emailIsGood = user.emails.reduce( - (prev, email) => prev || this._testEmailDomain(email.address), false - ); - } else if (user.services && Object.values(user.services).length > 0) { - // Find any email of any service and check it - emailIsGood = Object.values(user.services).reduce( - (prev, service) => service.email && this._testEmailDomain(service.email), - false, - ); - } - - if (emailIsGood) { - return true; - } - - if (typeof domain === 'string') { - throw new Meteor.Error(403, `@${domain} email required`); - } else { - throw new Meteor.Error(403, "Email doesn't match the criteria."); - } -} - // Encrypt unencrypted login service secrets when oauth-encryption is // added. // @@ -131,10 +82,6 @@ Meteor.startup(() => { return; } - Accounts._validateNewUserHooks = [ - defaultValidateNewUserHook.bind(this) - ]; - const { ServiceConfiguration } = Package['service-configuration']; ServiceConfiguration.configurations.find({ diff --git a/packages/promise/.npm/package/npm-shrinkwrap.json b/packages/promise/.npm/package/npm-shrinkwrap.json index 1fc0ce2f37..28c929e19b 100644 --- a/packages/promise/.npm/package/npm-shrinkwrap.json +++ b/packages/promise/.npm/package/npm-shrinkwrap.json @@ -7,9 +7,9 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "meteor-promise": { - "version": "1.0.0-alpha.0", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-1.0.0-alpha.0.tgz", - "integrity": "sha512-f0WbzHSkAqzaQW+LSVhj/XES9dnxNqiKj/qd18Dj0Mt6znt0+f+PYFEsO9PkLdHnIJzvX1iHDjfHvLzpTNPymw==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==" }, "promise": { "version": "8.1.0", From 619645307620a5dc822da6bdade4992e4eb06d26 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sat, 1 Oct 2022 17:04:21 +0200 Subject: [PATCH 041/293] Conditionally use service-configuration and oauth-encryption --- packages/accounts-base/accounts_server.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index e9dbca524c..04e92ba9e0 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -727,15 +727,19 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - const { OAuthEncryption } = Package["oauth-encryption"] - if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) - options.secret = OAuthEncryption.seal(options.secret); + if (Package["oauth-encryption"]) { + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) + options.secret = OAuthEncryption.seal(options.secret); + } - ServiceConfiguration.configurations.insert(options); + ServiceConfiguration.configurations.insert(options); + } }; accounts._server.methods(methods); From ccf753cfaffaef2ff5183126e541fc6c6a585095 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 2 Oct 2022 13:27:44 +0200 Subject: [PATCH 042/293] Initial changes for TypeScript 7.6.4 --- docs/history.md | 12 +++++++++++- npm-packages/eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 ++-- npm-packages/meteor-babel/package.json | 4 ++-- packages/babel-compiler/package.js | 4 ++-- packages/ecmascript/package.js | 2 +- packages/typescript/package.js | 2 +- tools/static-assets/skel-typescript/package.json | 2 +- 8 files changed, 21 insertions(+), 11 deletions(-) diff --git a/docs/history.md b/docs/history.md index a820c10a28..a5ad79d759 100644 --- a/docs/history.md +++ b/docs/history.md @@ -4,6 +4,7 @@ * New MongoDB Package Async API. [PR](https://github.com/meteor/meteor/pull/12028) * Node update to [v14.20.0](https://nodejs.org/en/blog/release/v14.20.0/) as part of the [July 7th security release](https://nodejs.org/en/blog/vulnerability/july-2022-security-releases/) * Update MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12097) +* Upgrade TypeScript to 4.6.4 [PR]() #### Breaking Changes N/A @@ -36,7 +37,16 @@ Read our [Migration Guide](https://deploy-preview-12057--meteor-guide.netlify.ap - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). - +* `@meteorjs/babel@7.17.0` + - Upgrade TypeScript to `4.6.4` +* `babel-compiler@7.10.0` + - Upgrade TypeScript to `4.6.4` +* `ecmascript@0.16.3` + - Upgrade TypeScript to `4.6.4` +* `typescript@4.6.4` + - Upgrade TypeScript to `4.6.4` +* `eslint-plugin-meteor@7.4.0` + - Upgrade TypeScript to `4.6.4` #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 6f01831721..7845d884a3 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.3.0", + "version": "7.4.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 6d107c5bf8..cce457c339 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + typescript: "4.6.4", + "@meteorjs/babel": "7.17.0-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index a896f5a3a1..c24a7b364b 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.1", + "version": "7.17.0-beta.1", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.5.4" + "typescript": "^4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 40999ff266..3252e30e68 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.10.0' }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.1', + '@meteorjs/babel': '7.17.0-beta.1', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index eed53fefd0..04cb3abcf1 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.2', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/typescript/package.js b/packages/typescript/package.js index df071432b9..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.5.4', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index c7c54d5cc4..76457880f7 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.3" + "typescript": "^4.6.4" }, "meteor": { "mainModule": { From f82d1d8c000238d2a62786699e614af3909280e6 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Tue, 4 Oct 2022 15:28:41 -0300 Subject: [PATCH 043/293] Changes suggested in the code review - Preserve current behavior from `Email.send` method, if use `customTransport`; - Added documentation information about `customTransport` in `Email.sendAsync` method; - Added more tests to `customTransport` use case. --- docs/source/api/email.md | 1 + packages/email/email.js | 15 ++++++- packages/email/email_tests.js | 75 +++++++++++++++++++++++++++++++---- 3 files changed, 82 insertions(+), 9 deletions(-) diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 23884f65ac..a4dc913954 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -86,6 +86,7 @@ Meteor.call( {% apibox "Email.sendAsync" %} `sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. +If you defined `Email.customTransport`, the `callAsync` method returns the return value from the `customTransport` method or a Promise, if this method is async. ```js // Server: Define a method that the client can call. diff --git a/packages/email/email.js b/packages/email/email.js index 4a26bca89b..eed8dbd9b3 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -232,8 +232,19 @@ Email.customTransport = undefined; */ Email.send = function (options) { if (Email.customTransport) { - // Don't wait for sending process. Preserve current behavior - return Email.sendAsync(options); + // Preserve current behavior + const email = options.mailComposer ? options.mailComposer.mail : options; + let send = true; + sendHooks.forEach((hook) => { + send = hook(email); + return send; + }); + if (!send) { + return; + } + const packageSettings = Meteor.settings.packages?.email || {}; + Email.customTransport({ packageSettings, ...email }); + return; } // Using Fibers Promise.await return Promise.await(Email.sendAsync(options)); diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index c01bd8f377..6f016f26b9 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -2,6 +2,14 @@ import { Email } from 'meteor/email'; import { smokeEmailTest } from './email_test_helpers'; import { TEST_CASES } from './email_tests_data'; +const CUSTOM_TRANSPORT_SETTINGS = { + email: { service: '1on1', user: 'test', password: 'pwd' }, +}; + +const sleep = (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + // Create dynamic sync tests TEST_CASES.forEach(({ title, options, testCalls }) => { Tinytest.add(`[Sync] ${title}`, function (test) { @@ -50,9 +58,7 @@ Tinytest.add( }); smokeEmailTest(function (stream) { - Meteor.settings.packages = { - email: { service: '1on1', user: 'test', password: 'pwd' }, - }; + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; Email.customTransport = (options) => { test.equal(options.from, 'foo@example.com'); test.equal(options.packageSettings?.service, '1on1'); @@ -128,9 +134,7 @@ Tinytest.addAsync( }); smokeEmailTest(function (stream) { - Meteor.settings.packages = { - email: { service: '1on1', user: 'test', password: 'pwd' }, - }; + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; Email.customTransport = (options) => { test.equal(options.from, 'foo@example.com'); test.equal(options.packageSettings?.service, '1on1'); @@ -239,7 +243,7 @@ Tinytest.add('[Sync] email - URL string for known hosts', function (test) { console.dir(hotmailTransport); test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - const falseService = { service: '1on1', user: 'test', password: 'pwd' }; + const falseService = CUSTOM_TRANSPORT_SETTINGS.email; const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); @@ -248,3 +252,60 @@ Tinytest.add('[Sync] email - URL string for known hosts', function (test) { errorMsg ); }); + +Tinytest.addAsync( + '[Async] email - with custom transport exception', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + throw new Meteor.Error('Expected error'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }).catch((err) => { + test.equal(err.error, 'Expected error'); + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Async] email - with custom transport long time running', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Sync] email - with custom transport long time running', + function (test, onComplete) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + onComplete(); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + } +); From 337c0490b404232284c6fd61e3db4d66ed6069e0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:24:29 -0300 Subject: [PATCH 044/293] feat: updated-cli to add insecure --- tools/cli/commands.js | 19 ++++++++++++++++++- tools/cli/help.txt | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..366c63f9b9 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -522,7 +522,7 @@ export const AVAILABLE_SKELETONS = [ main.registerCommand({ name: 'create', - maxArgs: 1, + maxArgs: 2, options: { list: { type: Boolean }, example: { type: String }, @@ -539,6 +539,7 @@ main.registerCommand({ tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, + prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -790,6 +791,22 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { + + // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file + if ((/packages/).test(f)) { + + const prototypePackages = + () => + 'autopublish # Publish all data to the clients (for prototyping)\n' + + 'insecure # Allow all DB writes from clients (for prototyping)'; + + // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else + if (options.prototype) { + return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) + } else { + return Buffer.from(contents.toString().replace(/~prototype~/g, '')) + } + } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 13c612e9fd..3f561b0e44 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--prototype] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -191,6 +191,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. + --prototype Create a prototype app. >>> update From 401ff9c53fb3fec27158256a77825bae3ba42f1a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:25:04 -0300 Subject: [PATCH 045/293] feat: updated skels to use ~prototype~ flag --- tools/static-assets/skel-apollo/.meteor/packages | 2 +- tools/static-assets/skel-bare/.meteor/packages | 2 +- tools/static-assets/skel-blaze/.meteor/packages | 3 +-- tools/static-assets/skel-chakra-ui/.meteor/packages | 3 +-- tools/static-assets/skel-full/.meteor/packages | 1 + tools/static-assets/skel-minimal/.meteor/packages | 1 + tools/static-assets/skel-react/.meteor/packages | 3 +-- tools/static-assets/skel-solid/.meteor/packages | 3 +-- tools/static-assets/skel-svelte/.meteor/packages | 3 +-- tools/static-assets/skel-tailwind/.meteor/packages | 3 +-- tools/static-assets/skel-typescript/.meteor/packages | 3 +-- tools/static-assets/skel-vue/.meteor/packages | 1 + 12 files changed, 12 insertions(+), 16 deletions(-) diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index caa775ee6f..0addfea192 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page - +~prototype~ static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 62bedd2c00..294120e852 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library - +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index c2506a81ed..5e929125ff 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,8 +19,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 8f6a2ce1df..42dd3fa370 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,6 +11,7 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index 60ed1976b3..d0998cd7ad 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,3 +15,4 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server +~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index d6c05d244b..492b563f76 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 0e3c38c047..6880ea240a 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,8 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 83be6b3a62..ddfbe7a490 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -15,6 +15,7 @@ es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command +~prototype~ tracker # Dependency tracker to allow reactive callbacks static-html # Define static page content in .html files From b383b599cb8c6831b873056aff75ef60e8e5a234 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:31:39 -0300 Subject: [PATCH 046/293] feat: added verification for packages --- tools/cli/commands.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 366c63f9b9..df3b1f2014 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -548,7 +548,13 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - + if (options.prototype) { + Console.error( + `The ${Console.command('--prototype')} option is not supported for packages.` + ); + Console.error(); + throw new main.ShowUsage; + } if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); From 60fb986fc3cbd69fc7d2c7b7415ade3e31d2848c Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Thu, 13 Oct 2022 22:28:45 -0300 Subject: [PATCH 047/293] Create base branch with basic helpers to concentrate Fiber's free work. --- packages/meteor/asl-helpers.js | 22 ++++++++++++++++++++++ packages/meteor/helpers.js | 34 ++++++++++++++++++++++++++++++++-- packages/meteor/package.js | 3 ++- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 packages/meteor/asl-helpers.js diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js new file mode 100644 index 0000000000..27d9b227cb --- /dev/null +++ b/packages/meteor/asl-helpers.js @@ -0,0 +1,22 @@ +const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {}; +const getValueFromAslStore = key => getAslStore()[key]; +const updateAslStore = (key, value) => getAslStore()[key] = value; + +Meteor._isFibersEnabled = !process.env.DISABLE_FIBERS && Meteor.isServer; +Meteor._getAslStore = getAslStore; +Meteor._getValueFromAslStore = getValueFromAslStore; +Meteor._updateAslStore = updateAslStore; + +Meteor._runAsync = (fn, ctx) => { + if (Meteor._isFibersEnabled) { + const Fiber = Npm.require('fibers'); + + return Fiber(() => { + fn.call(ctx); + }).run(); + } + + global.asyncLocalStorage.run(Meteor._getAslStore(), () => { + fn.call(ctx); + }); +}; diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index ad28064003..242921945c 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -71,6 +71,38 @@ Meteor._delete = function (obj /*, arguments */) { } }; + +/** + * 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 + * @returns {function(...[*]): Promise} + */ +Meteor.promisify = function (fn, context, errorFirst = true) { + return function (...fnArgs) { + return new Promise((resolve, reject) => { + const callback = Meteor.bindEnvironment((error, result) => { + let _error = error, _result = result; + if (!errorFirst) { + _error = result; + _result = error; + } + + if (_error) { + return reject(_error); + } + + resolve(_result); + }); + + const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined); + return fn.apply(context || this, filteredArgs); + }); + }; +}; + // wrapAsync can wrap any function that takes some number of arguments that // can't be undefined, followed by some optional arguments, where the callback // is the last optional argument. @@ -171,5 +203,3 @@ function logErr(err) { ); } } - -Meteor._isFibersEnabled = global._isFibersEnabled; diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 2224fb5caa..504a2231e7 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.1-rc280.0' + version: '1.10.1-beta280.2' }); Package.registerBuildPlugin({ @@ -33,6 +33,7 @@ Package.onUse(function (api) { api.addFiles('setimmediate.js', ['client', 'server']); api.addFiles('timers.js', ['client', 'server']); api.addFiles('errors.js', ['client', 'server']); + api.addFiles('asl-helpers.js', 'server'); api.addFiles('fiber_helpers.js', 'server'); api.addFiles('fiber_stubs_client.js', 'client'); api.addFiles('startup_client.js', ['client']); From d93c7568abb19c0448e7c5597ea6bda2be001fa3 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Thu, 13 Oct 2022 23:06:55 -0300 Subject: [PATCH 048/293] Don't apply async-await plugin and don't modify promise functions. --- npm-packages/meteor-babel/options.js | 12 +++++++----- npm-packages/meteor-babel/runtime.js | 24 +++++++++++++----------- packages/promise/server.js | 14 ++++++++------ 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 2d582a3102..dc215572b8 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,11 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); + if (!process.env.DISABLE_FIBERS) { + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: false + }]); + } // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/runtime.js b/npm-packages/meteor-babel/runtime.js index 43b5c85c85..c7fe580b3f 100644 --- a/npm-packages/meteor-babel/runtime.js +++ b/npm-packages/meteor-babel/runtime.js @@ -11,19 +11,21 @@ Module.prototype.resolve = function (id) { require("@meteorjs/reify/lib/runtime").enable(Module.prototype); -require("meteor-promise").makeCompatible( - global.Promise = global.Promise || - require("promise/lib/es6-extensions"), - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + global.Promise = global.Promise || + require("promise/lib/es6-extensions"), + require("fibers") + ); // If Promise.asyncApply is defined, use it to wrap calls to // regeneratorRuntime.async so that the entire async function will run in // its own Fiber, not just the code that comes after the first await. -if (typeof Promise.asyncApply === "function") { - var regeneratorRuntime = require("@babel/runtime/regenerator"); - var realAsync = regeneratorRuntime.async; - regeneratorRuntime.async = function (innerFn) { - return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); - }; + if (typeof Promise.asyncApply === "function") { + var regeneratorRuntime = require("@babel/runtime/regenerator"); + var realAsync = regeneratorRuntime.async; + regeneratorRuntime.async = function (innerFn) { + return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); + }; + } } diff --git a/packages/promise/server.js b/packages/promise/server.js index e07faeb52b..2f5f59a3c0 100644 --- a/packages/promise/server.js +++ b/packages/promise/server.js @@ -1,11 +1,13 @@ require("./extensions.js"); -require("meteor-promise").makeCompatible( - Promise, - // Allow every Promise callback to run in a Fiber drawn from a pool of - // reusable Fibers. - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + Promise, + // Allow every Promise callback to run in a Fiber drawn from a pool of + // reusable Fibers. + require("fibers") + ); +} // Reference: https://caniuse.com/#feat=promises require("meteor/modern-browsers").setMinimumBrowserVersions({ From ad77b6d89bad5629bc5604069a8ca9782e7c7764 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Thu, 13 Oct 2022 23:33:31 -0300 Subject: [PATCH 049/293] Don't use Future directly on TinyTest package. Also adding helpers that will be used when adding async tests. --- packages/test-helpers/async_multi.js | 30 +++++- packages/test-helpers/package.js | 5 +- packages/tinytest/tinytest.js | 153 ++++++++++++++++----------- packages/tinytest/tinytest_server.js | 4 +- 4 files changed, 124 insertions(+), 68 deletions(-) diff --git a/packages/test-helpers/async_multi.js b/packages/test-helpers/async_multi.js index e5ec3cb43c..04be6aedfe 100644 --- a/packages/test-helpers/async_multi.js +++ b/packages/test-helpers/async_multi.js @@ -142,8 +142,13 @@ testAsyncMulti = function (name, funcs, { isOnly = false } = {}) { test.extraDetails.asyncBlock = i++; new Promise(resolve => { - resolve(func.apply(context, [test, _.bind(em.expect, em)])); - }).then(result => { + const result = func.apply(context, [test, _.bind(em.expect, em)]); + if (result && typeof result.then === "function") { + return result.then((r) => resolve(r)) + } + + return resolve(result); + }).then(() => { em.done(); }, exception => { if (em.cancel()) { @@ -191,3 +196,24 @@ pollUntil = function (expect, f, timeout, step, noFail) { step ); }; + +/** + * Helper that is used on the async tests. + * Just run the function and assert if we have an error or not. + * @param fn + * @param test + * @param shouldErrorOut + * @returns {Promise<*>} + */ +runAndThrowIfNeeded = async (fn, test, shouldErrorOut) => { + let err, result; + try { + result = await fn(); + } catch (e) { + err = e; + } + + test[shouldErrorOut ? "isTrue" : "isFalse"](err); + + return result; +}; diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 17b6e0f37a..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.0' + version: '1.3.1' }); Package.onUse(function (api) { @@ -28,7 +28,8 @@ Package.onUse(function (api) { 'SeededRandom', 'clickElement', 'blurElement', 'focusElement', 'simulateEvent', 'getStyleProperty', 'canonicalizeHtml', 'renderToDiv', 'clickIt', - 'withCallbackLogger', 'testAsyncMulti', 'simplePoll', + 'withCallbackLogger', 'testAsyncMulti', + 'simplePoll', 'runAndThrowIfNeeded', 'makeTestConnection', 'DomUtils']); api.addFiles('try_all_permutations.js'); diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index 045548c6de..f5cd025b98 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -1,5 +1,3 @@ -const Future = Meteor.isServer && require('fibers/future'); - /******************************************************************************/ /* TestCaseResults */ /******************************************************************************/ @@ -186,6 +184,43 @@ export class TestCaseResults { this.ok(); } + _assertActual(actual, predicate, message) { + if (actual && predicate(actual)) + this.ok(); + else + this.fail({ + type: "throws", + message: (actual ? + "wrong error thrown: " + actual.message : + "did not throw an error as expected") + (message ? ": " + message : ""), + }); + } + + _guessPredicate(expected) { + let predicate; + + if (expected === undefined) { + predicate = function () { + return true; + }; + } else if (typeof expected === "string") { + predicate = function (actual) { + return typeof actual.message === "string" && + actual.message.indexOf(expected) !== -1; + }; + } else if (expected instanceof RegExp) { + predicate = function (actual) { + return expected.test(actual.message); + }; + } else if (typeof expected === 'function') { + predicate = expected; + } else { + throw new Error('expected should be a string, regexp, or predicate function'); + } + + return predicate; + } + // expected can be: // undefined: accept any exception. // string: pass if the string is a substring of the exception message. @@ -204,26 +239,8 @@ export class TestCaseResults { // particular class, use a predicate function. // throws(f, expected, message) { - var actual, predicate; - - if (expected === undefined) { - predicate = function (actual) { - return true; - }; - } else if (typeof expected === "string") { - predicate = function (actual) { - return typeof actual.message === "string" && - actual.message.indexOf(expected) !== -1; - }; - } else if (expected instanceof RegExp) { - predicate = function (actual) { - return expected.test(actual.message); - }; - } else if (typeof expected === 'function') { - predicate = expected; - } else { - throw new Error('expected should be a string, regexp, or predicate function'); - } + let actual; + const predicate = this._guessPredicate(expected); try { f(); @@ -231,15 +248,27 @@ export class TestCaseResults { actual = exception; } - if (actual && predicate(actual)) - this.ok(); - else - this.fail({ - type: "throws", - message: (actual ? - "wrong error thrown: " + actual.message : - "did not throw an error as expected") + (message ? ": " + message : ""), - }); + this._assertActual(actual, predicate, message); + } + + /** + * Same as throw, but accepts an async function as a parameter. + * @param f + * @param expected + * @param message + * @returns {Promise} + */ + async throwsAsync(f, expected, message) { + let actual; + const predicate = this._guessPredicate(expected); + + try { + await f(); + } catch (exception) { + actual = exception; + } + + this._assertActual(actual, predicate, message); } isTrue(v, msg) { @@ -309,7 +338,7 @@ export class TestCaseResults { pass = true; } } else { - /* fail -- not something that contains other things */; + /* fail -- not something that contains other things */ } if (pass === ! not) { @@ -546,37 +575,37 @@ export class TestRun { } if (Meteor.isServer) { - // On the server, ensure that only one test runs at a time, even - // with multiple clients. this.manager.testQueue.queueTask(() => { - // The future resolves when the test completes or times out. - var future = new Future(); - Meteor.setTimeout( - () => { - if (future.isResolved()) - // If the future has resolved the test has completed. - return; - test.timedOut = true; - this._report(test, { - type: "exception", - details: { - message: "test timed out" - } - }); - future['return'](); - }, - 3 * 60 * 1000 // 3 minutes - ); - this._runTest(test, () => { - // The test can complete after it has timed out (it might - // just be slow), so only resolve the future if the test - // hasn't timed out. - if (! future.isResolved()) - future['return'](); - }, stop_at_offset); - // Wait for the test to complete or time out. - future.wait(); - onComplete && onComplete(); + // On the server, ensure that only one test runs at a time, even + // with multiple clients. + let hasRan = false; + const timeoutPromise = new Promise((resolve) => { + Meteor.setTimeout(() => { + if (!hasRan) { + test.timedOut = true; + this._report(test, { + type: "exception", + details: { + message: "test timed out" + } + }); + } + + resolve(); + }, 3 * 60 * 1000); + }); + const runnerPromise = new Promise((resolve) => { + this._runTest(test, () => { + if (!hasRan) { + hasRan = true; + } + resolve(); + }, stop_at_offset); + }); + + Promise.race([runnerPromise, timeoutPromise]).finally(() => { + onComplete && onComplete(); + }); }); } else { // client diff --git a/packages/tinytest/tinytest_server.js b/packages/tinytest/tinytest_server.js index c43fb12b34..331a7007e7 100644 --- a/packages/tinytest/tinytest_server.js +++ b/packages/tinytest/tinytest_server.js @@ -9,7 +9,7 @@ import { export { Tinytest }; -const Fiber = require('fibers'); +const Fiber = Meteor._isFibersEnabled && require('fibers'); const handlesForRun = new Map; const reportsForRun = new Map; @@ -58,7 +58,7 @@ Meteor.methods({ } function onReport(report) { - if (! Fiber.current) { + if (Fiber && !Fiber.current) { Meteor._debug("Trying to report a test not in a fiber! "+ "You probably forgot to wrap a callback in bindEnvironment."); console.trace(); From a72874fb2c055a7a479da2fbcfc3a626dc3bc707 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 14 Oct 2022 00:49:19 -0300 Subject: [PATCH 050/293] feat: adjusted maxArgs variable --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index df3b1f2014..424493d4ce 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -522,7 +522,7 @@ export const AVAILABLE_SKELETONS = [ main.registerCommand({ name: 'create', - maxArgs: 2, + maxArgs: 1, options: { list: { type: Boolean }, example: { type: String }, From 0eaf07c90804811936acf3c98e9d981c0a736a3b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 14 Oct 2022 10:43:38 -0300 Subject: [PATCH 051/293] feat: adjusted commetns --- tools/cli/commands.js | 2 +- tools/cli/help.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 424493d4ce..cf0481c90c 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -550,7 +550,7 @@ main.registerCommand({ var packageName = options.args[0]; if (options.prototype) { Console.error( - `The ${Console.command('--prototype')} option is not supported for packages.` + `The ${Console.command('--prototype')} option is no longer supported for packages.` ); Console.error(); throw new main.ShowUsage; diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 3f561b0e44..0b22ab3e77 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -191,7 +191,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. - --prototype Create a prototype app. + --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update From 669e69d754d21f42c6c1b631d4dc3934fe3f8995 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Fri, 14 Oct 2022 20:27:54 -0300 Subject: [PATCH 052/293] Run tests with Fibers and without Fibers on CircleCI. --- .circleci/config.yml | 63 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8b275071cd..91e4525564 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2 +version: 2.1 # A reusable "run" snippet which is ran before each test to setup the # environment for user-limits, core-dumps, etc. @@ -96,6 +96,29 @@ build_machine_environment: &build_machine_environment NUM_GROUPS: 12 RUNNING_AVG_LENGTH: 6 +can_disable_fibers: &can_disable_fibers + parameters: + fibers: + type: boolean + default: true + +set_fibers_env: &set_fibers_env + name: "Disable Fibers" + command: | + if [ "<< parameters.fibers >>" == "false" ]; then + echo "Disabling Fibers" + echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV" + source "$BASH_ENV" + fi + + +# Run tests with Fibers and then without. +matrix_for_fibers: &matrix_for_fibers + matrix: + parameters: + fibers: [true, false] + + jobs: Get Ready: <<: *build_machine_environment @@ -167,6 +190,7 @@ jobs: path: /tmp/memuse.txt Isolated Tests: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -175,6 +199,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -209,6 +234,7 @@ jobs: path: /tmp/memuse.txt Test Group 0: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -217,6 +243,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -249,6 +276,7 @@ jobs: path: /tmp/memuse.txt Test Group 1: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -257,6 +285,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -289,6 +318,7 @@ jobs: path: /tmp/memuse.txt Test Group 2: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -297,6 +327,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -329,6 +360,7 @@ jobs: path: /tmp/memuse.txt Test Group 3: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -337,6 +369,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -369,6 +402,7 @@ jobs: path: /tmp/memuse.txt Test Group 4: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -377,6 +411,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -409,6 +444,7 @@ jobs: path: /tmp/memuse.txt Test Group 5: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -417,6 +453,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -449,6 +486,7 @@ jobs: path: /tmp/memuse.txt Test Group 6: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -457,6 +495,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -489,6 +528,7 @@ jobs: path: /tmp/memuse.txt Test Group 7: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -497,6 +537,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -529,6 +570,7 @@ jobs: path: /tmp/memuse.txt Test Group 8: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -537,6 +579,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -569,6 +612,7 @@ jobs: path: /tmp/memuse.txt Test Group 9: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -577,6 +621,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -609,6 +654,7 @@ jobs: path: /tmp/memuse.txt Test Group 10: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -617,6 +663,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -687,6 +734,7 @@ jobs: npm test Clean Up: + <<: *can_disable_fibers <<: *build_machine_environment steps: - attach_workspace: @@ -769,42 +817,55 @@ workflows: - Docs - Get Ready - Isolated Tests: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 0: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 1: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 2: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 3: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 4: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 5: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 6: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 7: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 8: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 9: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 10: + <<: *matrix_for_fibers requires: - Get Ready - Clean Up: + <<: *matrix_for_fibers requires: - Isolated Tests - Test Group 0 From 798ffce0732893ed6c076f134ed1645a93b1cfb8 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Fri, 14 Oct 2022 23:05:46 -0300 Subject: [PATCH 053/293] Run tests with Fibers and without Fibers on Travis. --- .travis.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2d4a4a74d6..d3f1d88c1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,13 +8,16 @@ cache: - ".meteor" - ".babel-cache" script: - - export phantom=false - # to skip Downloading Chromium on every run - # https://github.com/dfernandez79/puppeteer/blob/main/README.md#q-chromium-gets-downloaded-on-every-npm-ci-run-how-can-i-cache-the-download - - export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - travis_retry ./packages/test-in-console/run.sh env: - - CXX=g++-4.8 + global: + - CXX=g++-4.8 + - phantom=false + - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium + jobs: + - DISABLE_FIBERS=1 + # Use a different flag, since node would use false as a string. + - FIBERS_ENABLED=1 addons: apt: sources: From ef2223cb7f5e57b1dea9f3cb4de30b505d6876f1 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Fri, 14 Oct 2022 23:27:51 -0300 Subject: [PATCH 054/293] Bump babel packages version --- npm-packages/meteor-babel/package.json | 2 +- packages/babel-compiler/package.js | 2 +- packages/promise/package.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index a896f5a3a1..0dff4111ad 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.1", + "version": "7.16.0-beta.2", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 40999ff266..ee8f991146 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.1', + '@meteorjs/babel': '7.16.0-beta.2', 'json5': '2.1.1' }); diff --git a/packages/promise/package.js b/packages/promise/package.js index fad988b619..05f9c59eca 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.0", + version: "0.12.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" From d5416028459f8e7e4a4ad8be78f74cd78df84def Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 17 Oct 2022 11:34:44 -0300 Subject: [PATCH 055/293] Bumping @meteorjs/babel version --- npm-packages/meteor-babel/package.json | 2 +- packages/babel-compiler/package.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 0dff4111ad..3427d1f709 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.2", + "version": "7.16.0-beta.6", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index ee8f991146..33abff8da5 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.2', + '@meteorjs/babel': '7.16.0-beta.6', 'json5': '2.1.1' }); diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index a2d440e238..5247e15fe9 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.0-beta.6", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From f6a264bff79ec256e2dfa1b07c3847826a6bf09f Mon Sep 17 00:00:00 2001 From: harryadel Date: Fri, 21 Oct 2022 14:01:21 +0200 Subject: [PATCH 056/293] [package-version-parser] Remove underscore --- .../package-version-parser/package-version-parser-tests.js | 4 ++-- packages/package-version-parser/package.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 855dc56057..ff82ae9086 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - _.each(invalidVersions, function (v) { + invalidVersions.forEach(function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - _.each(validVersions, function (v) { + validVersions.forEach(function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4c6ff0dc62..118b9c3f11 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -15,6 +15,6 @@ Package.onUse(function (api) { Package.onTest(function (api) { api.use('package-version-parser'); - api.use(['tinytest', 'underscore']); + api.use(['tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); From 7b5c91a13ab8737abebc77aadf117fa3d4a03279 Mon Sep 17 00:00:00 2001 From: Edimar Cardoso Date: Mon, 24 Oct 2022 09:30:06 -0300 Subject: [PATCH 057/293] Keep the babel runtime package version. The current package, 7.16.0-beta-6, always changes the babel packages to the latest version; It is the cause of the test is broken. --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- npm-packages/meteor-babel/package-lock.json | 2 +- npm-packages/meteor-babel/package.json | 4 ++-- packages/babel-compiler/package.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 6d107c5bf8..17b63e201f 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.0-beta.7", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 7fec2af89a..8e5d6a7e5d 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,6 +1,6 @@ { "name": "@meteorjs/babel", - "version": "7.16.0-beta.1", + "version": "7.16.0-beta.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 3427d1f709..5fbdf188b9 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.6", + "version": "7.16.0-beta.7", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -37,7 +37,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-react": "^7.16.7", - "@babel/runtime": "^7.17.2", + "@babel/runtime": "7.17.2", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 33abff8da5..32515319fb 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.6', + '@meteorjs/babel': '7.16.0-beta.7', 'json5': '2.1.1' }); diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 5247e15fe9..e0f21db047 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.6", + "@meteorjs/babel": "7.16.0-beta.7", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 5b974986990295c558c7e5dd87766079c3fd5890 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 24 Oct 2022 17:32:46 +0200 Subject: [PATCH 058/293] Fix mistake in conflict resolution --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 36788500a3..21213fed72 100644 --- a/docs/history.md +++ b/docs/history.md @@ -13,7 +13,7 @@ #### Highlights * New MongoDB Package Async API. [PR](https://github.com/meteor/meteor/pull/12028) -* Node update to [v14.20.1](https://nodejs.org/en/blog/releabefore releasing it I will do a check where it needs to be updated thx for bringing that outse/v14.20.1/) as part of the [September 22nd security release](https://nodejs.org/en/blog/vulnerability/september-2022-security-releases/) +* Node update to [v14.20.1](https://nodejs.org/en/blog/release/v14.20.1/) as part of the [September 22nd security release](https://nodejs.org/en/blog/vulnerability/september-2022-security-releases/) * Update MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12097) * Meteor.callAsync method. [PR](https://github.com/meteor/meteor/pull/12196) * Added new Chakra-ui Skeleton. [PR](https://github.com/meteor/meteor/pull/12181) From 33015f00d1d00383012a35cb0e46bd84c3338e1d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 24 Oct 2022 16:22:03 -0300 Subject: [PATCH 059/293] feat: added userAsync for accounts base --- packages/accounts-base/accounts_client.js | 5 +++++ packages/accounts-base/accounts_common.js | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index cfded81faa..842e927ad9 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,6 +798,11 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); + // TODO: the code above needs to be changed to Meteor.userAsync() when we have + // a way to make it reactive using async. + // Template.registerHelper('currentUserAsync', + // async () => await Meteor.userAsync()); + /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..95a84de0cf 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -170,6 +170,18 @@ export class AccountsCommon { : null; } + /** + * @summary Get the current user record, or `null` if no user is logged in. + * @locus Anywhere + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ + async userAsync(options) { + const userId = this.userId(); + return userId + ? await this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + : null; + } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -418,6 +430,15 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); +/** + * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. + * @locus Anywhere but publish functions + * @importFromPackage meteor + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ +Meteor.userAsync = options => Accounts.userAsync(options); + // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires From b99c29a3b92165ef503b77324f69fab203d9238f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 24 Oct 2022 16:22:18 -0300 Subject: [PATCH 060/293] tests: added tests for Meteor.userAsync(); --- .../accounts-base/accounts_client_tests.js | 47 +++++++++++++++- packages/accounts-base/accounts_tests.js | 56 +++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 9ebb7d4b9f..ccf0aa510a 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,6 +94,20 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.loggingIn() is false after login has completed', + (test, done) => { + logoutAndCreateUser(test, done, () => { + // Login then verify loggingIn is false after login has completed + Meteor.loginWithPassword(username, password, async () => { + test.isTrue(await Meteor.userAsync()); + test.isFalse(Meteor.loggingIn()); + removeTestUser(done); + }); + }); + } +); + Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -150,7 +164,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user obeys explicit and default field selectors', + 'accounts - Meteor.user() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -178,6 +192,37 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', + (test, done) => { + logoutAndCreateUser(test, done, () => { + Meteor.loginWithPassword(username, password, () => { + // by default, all fields should be returned + Meteor.userAsync().then(user => { + test.equal( user.profile[excludeField], excludeValue); + }); + + // this time we want to exclude the default fields + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({defaultFieldSelector: {['profile.'+defaultExcludeField]: 0}}); + Meteor.userAsync().then(async user => { + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + }) + // this time we only want certain fields... + Meteor.userAsync({fields: {'profile.name': 1}}).then(user => { + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); + }); + Accounts._options = options; + removeTestUser(done); + }); + }); + } +); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index de870e0f81..7c06621f79 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,6 +604,62 @@ Tinytest.add( } ); + +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', + async test => { + const ignoreFieldName = "bigArray"; + const customField = "customField"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + + // stub Meteor.userId() so it works outside methods and returns the correct user: + const origAccountsUserId = Accounts.userId; + Accounts.userId = () => userId; + + Accounts._options = {}; + + // test the field is included by default + let user = await Meteor.userAsync(); + test.isNotUndefined(user[ignoreFieldName], 'included by default'); + + // test the field is excluded + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); + user = await Meteor.userAsync(); + test.isUndefined(user[ignoreFieldName], 'excluded'); + user = Meteor.user({}); + test.isUndefined(user[ignoreFieldName], 'excluded {}'); + + // test the field can still be retrieved if required + user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); + test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); + test.isUndefined(user.username, 'field can be retrieved username'); + + // test a combined negative field specifier + user = await Meteor.userAsync({ fields: { username: 0 } }); + test.isUndefined(user[ignoreFieldName], 'combined field selector'); + test.isUndefined(user.username, 'combined field selector username'); + + // test an explicit request for the full user object + user = await Meteor.userAsync({ fields: {} }); + test.isNotUndefined(user[ignoreFieldName], 'full selector'); + test.isNotUndefined(user.username, 'full selector username'); + + Accounts._options = {}; + + // Test that a custom field gets retrieved properly + Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); + user = await Meteor.userAsync(); + test.isNotUndefined(user[customField]); + test.isUndefined(user.username); + test.isUndefined(user[ignoreFieldName]); + + Accounts._options = options; + Accounts.userId = origAccountsUserId; + } +); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { From 140069c306bb3a584f94d18d12cccbc35e3ef186 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 25 Oct 2022 14:34:36 -0300 Subject: [PATCH 061/293] chore: adressed comments --- packages/accounts-base/accounts_common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index 95a84de0cf..8f9d6a0c51 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -179,7 +179,7 @@ export class AccountsCommon { async userAsync(options) { const userId = this.userId(); return userId - ? await this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) : null; } // Set up config for the accounts system. Call this on both the client From 3723bd71a147bc064ed4e7c1bb19496364cfe4a7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:07:46 -0300 Subject: [PATCH 062/293] tests: updated tests as commented --- .../accounts-base/accounts_client_tests.js | 33 ++++++++++--------- packages/accounts-base/accounts_tests.js | 2 +- packages/accounts-password/password_client.js | 6 ++-- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index ccf0aa510a..880a71e4fe 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -100,8 +100,8 @@ Tinytest.addAsync( logoutAndCreateUser(test, done, () => { // Login then verify loggingIn is false after login has completed Meteor.loginWithPassword(username, password, async () => { - test.isTrue(await Meteor.userAsync()); test.isFalse(Meteor.loggingIn()); + test.isTrue(await Meteor.userAsync()); removeTestUser(done); }); }); @@ -196,27 +196,28 @@ Tinytest.addAsync( 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { - Meteor.loginWithPassword(username, password, () => { + Meteor.loginWithPassword(username, password, async () => { // by default, all fields should be returned - Meteor.userAsync().then(user => { - test.equal( user.profile[excludeField], excludeValue); - }); + let user; + user = await Meteor.userAsync(); + test.equal(user.profile[excludeField], excludeValue); // this time we want to exclude the default fields const options = Accounts._options; Accounts._options = {}; - Accounts.config({defaultFieldSelector: {['profile.'+defaultExcludeField]: 0}}); - Meteor.userAsync().then(async user => { - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile[excludeField], excludeValue); - test.equal(user.profile.name, username); - }) + Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); + + user = await Meteor.userAsync(); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + // this time we only want certain fields... - Meteor.userAsync({fields: {'profile.name': 1}}).then(user => { - test.isUndefined(user.profile[excludeField]); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile.name, username); - }); + + user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); Accounts._options = options; removeTestUser(done); }); diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 7c06621f79..797bd758f0 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -629,7 +629,7 @@ Tinytest.addAsync( Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); user = await Meteor.userAsync(); test.isUndefined(user[ignoreFieldName], 'excluded'); - user = Meteor.user({}); + user = await Meteor.userAsync({}); test.isUndefined(user[ignoreFieldName], 'excluded {}'); // test the field can still be retrieved if required diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 5d1279782b..50b3329cb9 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -21,11 +21,13 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { code, }, ], - userCallback: (error, result) => { + userCallback: async (error, result) => { if (error) { reportError(error, callback); } else { - callback && callback(); + const isAsync = callback && callback.constructor.name === 'AsyncFunction'; + if (isAsync) callback && await callback(); + else callback && callback(); } }, }); From 070445050bf7dbd2e86820f24be1dcd175d9bcf7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:15:36 -0300 Subject: [PATCH 063/293] chore: created reportErrorAsync --- packages/accounts-password/password_client.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 50b3329cb9..735d58e03a 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,12 +7,18 @@ const reportError = (error, callback) => { } }; +const reportErrorAsync = async (error, callback) => { + if (callback) { + await callback(error); + } else { + throw error; + } +}; const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; - Accounts.callLoginMethod({ methodArguments: [ { @@ -22,10 +28,11 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { }, ], userCallback: async (error, result) => { + const isAsync = callback && callback.constructor.name === 'AsyncFunction'; if (error) { - reportError(error, callback); + if (isAsync) await reportErrorAsync(error, callback); + else reportError(error, callback); } else { - const isAsync = callback && callback.constructor.name === 'AsyncFunction'; if (isAsync) callback && await callback(); else callback && callback(); } From e3c6b0159891769a4ba26db6075416b249c50e30 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:46:28 -0300 Subject: [PATCH 064/293] chore: remove async code --- packages/accounts-password/password_client.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 735d58e03a..30d3b49450 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,14 +7,6 @@ const reportError = (error, callback) => { } }; -const reportErrorAsync = async (error, callback) => { - if (callback) { - await callback(error); - } else { - throw error; - } -}; - const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; @@ -27,14 +19,11 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { code, }, ], - userCallback: async (error, result) => { - const isAsync = callback && callback.constructor.name === 'AsyncFunction'; + userCallback: (error, result) => { if (error) { - if (isAsync) await reportErrorAsync(error, callback); - else reportError(error, callback); + reportError(error, callback); } else { - if (isAsync) callback && await callback(); - else callback && callback(); + callback && callback(); } }, }); From 7a168776b444a48f18c9ba5ce72363360e59e678 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Thu, 27 Oct 2022 20:02:53 +0200 Subject: [PATCH 065/293] Update history --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 106ec75436..4eb43cceea 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,6 +1,7 @@ ## 2.8.1, Unreleased #### Highlights +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) #### Breaking Changes @@ -11,7 +12,6 @@ - Updated default version of Facebook GraphAPI to v15 - ## v2.8, 2022-10-19 #### Highlights From 2a7d05c094bf03d2e99e8c6d928970b63133b0c4 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:18:48 +0200 Subject: [PATCH 066/293] build: harden npm-meteor-babel.yml permissions Signed-off-by: Alex --- .github/workflows/npm-meteor-babel.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-meteor-babel.yml b/.github/workflows/npm-meteor-babel.yml index 6a20fb61b2..c2a260b3ae 100644 --- a/.github/workflows/npm-meteor-babel.yml +++ b/.github/workflows/npm-meteor-babel.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/meteor-babel/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 7a986c3e6445b524d09ddb87d9b4ac0883881d69 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:18:58 +0200 Subject: [PATCH 067/293] build: harden npm-meteor-promise.yml permissions Signed-off-by: Alex --- .github/workflows/npm-meteor-promise.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-meteor-promise.yml b/.github/workflows/npm-meteor-promise.yml index 247a5a76c2..6351c718fd 100644 --- a/.github/workflows/npm-meteor-promise.yml +++ b/.github/workflows/npm-meteor-promise.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/meteor-promise/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 66f3f9a85daf73e36dc311b77e39feac39db6d93 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:19:58 +0200 Subject: [PATCH 068/293] build: harden labeler.yml permissions Signed-off-by: Alex --- .github/workflows/labeler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 88603611be..1861d20d9e 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -9,6 +9,10 @@ name: Labeler on: - pull_request_target +permissions: + contents: read # to determine modified files (actions/labeler) + pull-requests: write # to add labels to PRs (actions/labeler) + jobs: label: runs-on: ubuntu-latest From a7f176bd65fab797f60795f32a3867a83d5eb5c0 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:20:10 +0200 Subject: [PATCH 069/293] build: harden npm-eslint-plugin-meteor.yml permissions Signed-off-by: Alex --- .github/workflows/npm-eslint-plugin-meteor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-eslint-plugin-meteor.yml b/.github/workflows/npm-eslint-plugin-meteor.yml index cb283e3c54..33c0ca5921 100644 --- a/.github/workflows/npm-eslint-plugin-meteor.yml +++ b/.github/workflows/npm-eslint-plugin-meteor.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/eslint-plugin-meteor/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 50e763fb44df5ebde9801c2ffcbc1a9d0b908117 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Mon, 31 Oct 2022 21:27:46 -0300 Subject: [PATCH 070/293] Fix "type" is not defined issue on TinyTest. --- packages/test-in-browser/driver.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..e707f6de2c 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type !== "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); \ No newline at end of file +}); From 5cca61090c1dffd8e905fc911995595b3a58c413 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:55:40 -0300 Subject: [PATCH 071/293] feat: cli command --- tools/cli/commands.js | 106 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..c78c915f18 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2508,6 +2508,112 @@ main.registerCommand({ }); +/////////////////////////////////////////////////////////////////////////////// +// generate +/////////////////////////////////////////////////////////////////////////////// + + +// Examples of generate: +// meteor generate --collection posts -> api/posts/collection.js => Posts +// meteor generate --methods posts -> api/posts/methods.js => Posts +// meteor generate posts ^^ same as above + +main.registerCommand({ + name: 'generate', + maxArgs: 1, + minArgs: 1, + options: { + path: { type: String }, + }, + pretty: false, + catalogRefresh: new catalog.Refresh.Never() +}, function (options) { + const { args, appDir } = options; + /** + * @type{string} + */ + const scaffoldName = args[0]; + + // get directory where we will place our files + const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; + + if (scaffoldName.includes('-')) throw new main.ShowUsage; + + if (scaffoldName.includes('/')) throw new main.ShowUsage; + + const allNonWordRegex = /\W/g; + if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; + + const getFilesInDir = (appDir) => { + const appPath = files.pathResolve(appDir); + return files.readdirNoDots(appPath); + } + + const getExtension = () => { + const rootFiles = getFilesInDir(appDir); + if (rootFiles.includes('tsconfig.json')) return 'ts' + else return 'js' + } + + /** + * @param str{string} + * @returns {string} + */ + const toPascalCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); + + + /** + * + * @param name {string} + */ + const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$UpperName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$UpperName$$') return toPascalCase(scaffoldName); + }) + } + + + /// Program + + const extension = getExtension() + const assetsPath = () => { + return files.pathJoin( + __dirnameConverted, + '..', + 'static-assets', + `scaffolds-${ extension }`) + } + // create directory + const isOk = files.mkdir_p(scaffoldPath); + // Remember to write that code 2 means that something went wrong on creating the folder + if (!isOk) return 2; + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { + transformFilename: function (f) { + return transformName(f); + }, + transformContents: function (contents, file) { + return transformName(contents.toString()); + } + }) + // TODO: add to imports to main.js + // before get meteor.mainModule.server string from package.json + // get from package.json + + const mainJsPath = files.pathJoin(appDir, 'server', 'main.js'); + const mainJs = files.readFile(mainJsPath); + const mainJsLines = mainJs.toString().split('\n'); + const importLine = options.path + ? `import ${options.path}/${scaffoldName}';` + : `import '/imports/api/${ scaffoldName }';` + const mainJsFile = [importLine, ...mainJsLines].join('\n'); + files.writeFile(mainJsPath, mainJsFile); + + + return 0; +}); + + /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// From 89a5cf2d9066831b41b66bcc71f5c82fac40d104 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:05 -0300 Subject: [PATCH 072/293] feat: cli collection.js --- tools/static-assets/scaffolds-js/collection.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/collection.js diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js new file mode 100644 index 0000000000..88592bbe98 --- /dev/null +++ b/tools/static-assets/scaffolds-js/collection.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); From cfe20a240a7a042127dfb6b76336af75f7e60c89 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:13 -0300 Subject: [PATCH 073/293] feat: cli index.js --- tools/static-assets/scaffolds-js/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/index.js diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js new file mode 100644 index 0000000000..032d84717e --- /dev/null +++ b/tools/static-assets/scaffolds-js/index.js @@ -0,0 +1,15 @@ +import { $$UpperName$$Collection } from './collection'; +import { + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} from './methods'; + +export { + $$UpperName$$Collection, + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} From 2f4132d2278957f5645925e5b404b5b918cd31be Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:24 -0300 Subject: [PATCH 074/293] feat: cli methods.js --- tools/static-assets/scaffolds-js/methods.js | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/methods.js diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js new file mode 100644 index 0000000000..9ad38e68ab --- /dev/null +++ b/tools/static-assets/scaffolds-js/methods.js @@ -0,0 +1,25 @@ +import { Meteor } from 'meteor/meteor' +import { $$UpperName$$Collection } from './collection'; + +export const save$$UpperName$$ = async (data) => { + return await $$UpperName$$Collection.insertAsync({ ...data }); +} + +export const update$$UpperName$$ = async (_id, data) => { + return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +} + +export const remove$$UpperName$$ = async (_id) => { + return await $$UpperName$$Collection.removeAsync(_id); +} + +export const find$$UpperName$$ById = async (_id) => { + return await $$UpperName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +}); From f2750750ff1cd09764a3297996cd33110c7ac62f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:31 -0300 Subject: [PATCH 075/293] feat: cli collection.ts --- tools/static-assets/scaffolds-ts/collection.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/collection.ts diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts new file mode 100644 index 0000000000..9ca4839cf5 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -0,0 +1,9 @@ +import { Mongo } from 'meteor/mongo'; + +export type $$UpperName$$ = { + _id?: string; + name: string; + createdAt: Date; +} + +export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); From f9f82f1c2deb01c12a9cfb45cfe0ce1dd0622127 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:40 -0300 Subject: [PATCH 076/293] feat: cli index.ts --- tools/static-assets/scaffolds-ts/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/index.ts diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts new file mode 100644 index 0000000000..5538203e55 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -0,0 +1,15 @@ +import { $$UpperName$$Collection } from './collection'; +import { + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} from './methods'; + +export { +$$UpperName$$Collection, + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} From 9d7933628257617554c8f9fbc0b76504083f6fe4 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:48 -0300 Subject: [PATCH 077/293] feat: cli index.ts --- tools/static-assets/scaffolds-ts/methods.ts | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/methods.ts diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts new file mode 100644 index 0000000000..18ab0a171b --- /dev/null +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -0,0 +1,25 @@ +import { Meteor } from 'meteor/meteor' +import { $$UpperName$$ , $$UpperName$$Collection } from './collection'; + +export const save$$UpperName$$ = async (data: $$UpperName$$) => { + return await $$UpperName$$Collection.insertAsync({ ...data }); +} + +export const update$$UpperName$$ = async (_id: string, data: Partial<$$UpperName$$>) => { + return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +} + +export const remove$$UpperName$$ = async (_id: string) => { + return await $$UpperName$$Collection.removeAsync(_id); +} + +export const find$$UpperName$$ById = async (_id: string) => { + return await $$UpperName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +}); From 598b4989704632586f280874e30733728cc9835f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 15:18:43 -0300 Subject: [PATCH 078/293] finished simple implementation --- tools/cli/commands.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index c78c915f18..8bc026e2dd 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2537,11 +2537,9 @@ main.registerCommand({ // get directory where we will place our files const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; - if (scaffoldName.includes('-')) throw new main.ShowUsage; - if (scaffoldName.includes('/')) throw new main.ShowUsage; - const allNonWordRegex = /\W/g; + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; const getFilesInDir = (appDir) => { @@ -2556,11 +2554,14 @@ main.registerCommand({ } /** + * if contains - turns into pascal * @param str{string} * @returns {string} */ - const toPascalCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); - + const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } /** * @@ -2596,15 +2597,19 @@ main.registerCommand({ return transformName(contents.toString()); } }) - // TODO: add to imports to main.js - // before get meteor.mainModule.server string from package.json - // get from package.json - const mainJsPath = files.pathJoin(appDir, 'server', 'main.js'); + const packageJsonPath = files.pathJoin(appDir, 'package.json'); + const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonFile); + + const mainJsPath = + packageJson?.meteor?.mainModule?.server + ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) + : files.pathJoin(appDir, 'server', 'main.js'); const mainJs = files.readFile(mainJsPath); const mainJsLines = mainJs.toString().split('\n'); const importLine = options.path - ? `import ${options.path}/${scaffoldName}';` + ? `import '${options.path}';` : `import '/imports/api/${ scaffoldName }';` const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); From 3d52e69c0001989724e76368130ef37e2bc5f1cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 4 Nov 2022 22:25:59 +0100 Subject: [PATCH 079/293] Implemented Fibers-less MongoDB count methods. --- packages/minimongo/local_collection.js | 8 ++++++++ packages/mongo/collection.js | 7 +++++++ packages/mongo/collection_async_tests.js | 11 +++++++++++ packages/mongo/mongo_driver.js | 10 ++++++++++ packages/mongo/remote_collection_driver.js | 21 ++++++++++++++++++--- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index e3668eeb03..43877fb87e 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,6 +39,14 @@ export default class LocalCollection { this.paused = false; } + countDocuments(selector, options) { + return this.find(selector ?? {}, options).countAsync(); + } + + estimatedDocumentCount(options) { + return this.find({}, options).countAsync(); + } + // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 3dcc12dc96..9185e1c13d 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,6 +319,13 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + countDocuments(...args) { + return this._collection.countDocuments(...args); + }, + + estimatedDocumentCount(...args) { + return this._collection.estimatedDocumentCount(...args); + }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index 5d3a277fa0..d709cee26c 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,3 +19,14 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); + +['countDocuments', 'estimatedDocumentCount'].forEach(method => { + Tinytest.addAsync(`async collection - ${method}`, async test => { + const collection = new Mongo.Collection(method + test.id); + for (let index = 0; index < 10; ++index) { + test.instanceOf(collection[method](), Promise); + test.equal(await collection[method](), index); + collection.insert({}); + } + }); +}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index b8fa60d531..da21e037e2 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -819,6 +819,16 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; +MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + const collection = this.rawCollection(collectionName); + return collection.countDocuments(...args); +}; + +MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + const collection = this.rawCollection(collectionName); + return collection.estimatedDocumentCount(...args); +}; + MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index f237879de0..035af45157 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,13 +4,28 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; +const REMOTE_COLLECTION_METHODS = [ + '_createCappedCollection', + '_dropIndex', + '_ensureIndex', + 'createIndex', + 'countDocuments', + 'dropCollection', + 'estimatedDocumentCount', + 'find', + 'findOne', + 'insert', + 'rawCollection', + 'remove', + 'update', + 'upsert', +]; + Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - ['find', 'findOne', 'insert', 'update', 'upsert', - 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', - 'dropCollection', 'rawCollection'].forEach( + REMOTE_COLLECTION_METHODS.forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); From 73c05c2ca80bf2e454ba8cdbaf0634f19147faed Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:09:36 -0300 Subject: [PATCH 080/293] chore: added validation and logs --- tools/cli/commands.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 8bc026e2dd..241e148e07 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2542,9 +2542,14 @@ main.registerCommand({ const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; + /** + * + * @param appDir + * @returns {string[]} + */ const getFilesInDir = (appDir) => { const appPath = files.pathResolve(appDir); - return files.readdirNoDots(appPath); + return files.readdir(appPath); } const getExtension = () => { @@ -2576,6 +2581,8 @@ main.registerCommand({ /// Program + const rootFiles = getFilesInDir(appDir); + if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; const extension = getExtension() const assetsPath = () => { @@ -2614,6 +2621,7 @@ main.registerCommand({ const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); + Console.info(`Created ${ scaffoldName } scaffold in ${ scaffoldPath }`); return 0; }); From c442071f5e77b1b5c0411d9e1560ef8f22b2bbb5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:09:47 -0300 Subject: [PATCH 081/293] docs: added docs for generate cli --- tools/cli/help.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 13c612e9fd..f666f7df38 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -841,6 +841,20 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` +>>> generate +Generate boilerplate code for a MeteorJS RPC api. It generates a collection with +the name you pass and its methods. Is JS and TS compatible. + +Usage: meteor generate [options] + +Generates a collection.ts|js file with the name you pass and its methods(insert, +update, remove, find, findOne) in a methods.js|ts file. +This is a MeteorJS project command. + +Options: + --help, -h Show this help message. + --path A Path where the files will be generated. Default is the + imports/api directory. >>> publish-release Publish a new meteor release to the package server. From 92f400439a006282dac3f540fa6f199781d3dd6f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:39:18 -0300 Subject: [PATCH 082/293] fix: adjusted identation and missing import --- tools/static-assets/scaffolds-ts/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 5538203e55..35eb719b1c 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,4 +1,4 @@ -import { $$UpperName$$Collection } from './collection'; +import { $$UpperName$$, $$UpperName$$Collection } from './collection'; import { save$$UpperName$$, update$$UpperName$$, @@ -7,7 +7,8 @@ import { } from './methods'; export { -$$UpperName$$Collection, + $$UpperName$$, + $$UpperName$$Collection, save$$UpperName$$, update$$UpperName$$, remove$$UpperName$$, From 895f553a8301c978d344bd47bfd088bbab092095 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:04 -0300 Subject: [PATCH 083/293] chore: adjusted index.js for scaffold --- tools/static-assets/scaffolds-js/index.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 032d84717e..7ada47967a 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,15 +1,7 @@ import { $$UpperName$$Collection } from './collection'; -import { - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById -} from './methods'; +import * as $$UpperName$$ from './methods'; export { $$UpperName$$Collection, - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + $$UpperName$$ } From 387016730e7f500b3ce1fd333ef8e530dc66cfa1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:16 -0300 Subject: [PATCH 084/293] chore: adjusted index.ts for scaffold --- tools/static-assets/scaffolds-ts/index.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 35eb719b1c..5d4baf3fed 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,16 +1,8 @@ -import { $$UpperName$$, $$UpperName$$Collection } from './collection'; -import { - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById -} from './methods'; +import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; +import * as $$UpperName$$ from './methods'; export { - $$UpperName$$, + $$UpperName$$Type, $$UpperName$$Collection, - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + $$UpperName$$ } From 73bebcc7de9f1693cbd76f10fe2e8aa1493c582f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:38 -0300 Subject: [PATCH 085/293] fix: adjusted typedef for scaffold-ts --- tools/static-assets/scaffolds-ts/collection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 9ca4839cf5..43d29c2922 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,6 +1,6 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$ = { +export type $$UpperName$$Type = { _id?: string; name: string; createdAt: Date; From 78efcc40747446992bce43bb22ba0d52e3134ede Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:15:06 -0300 Subject: [PATCH 086/293] fix: adressed comments in methods.js in scaffolds --- tools/static-assets/scaffolds-js/methods.js | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 9ad38e68ab..5cfdf95dca 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,25 @@ -import { Meteor } from 'meteor/meteor' +import { Meteor } from 'meteor/meteor'; import { $$UpperName$$Collection } from './collection'; -export const save$$UpperName$$ = async (data) => { - return await $$UpperName$$Collection.insertAsync({ ...data }); +export function create$$UpperName$$(data) { + return $$UpperName$$Collection.insertAsync({ ...data }); } -export const update$$UpperName$$ = async (_id, data) => { - return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update$$UpperName$$(_id, data) { + return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export const remove$$UpperName$$ = async (_id) => { - return await $$UpperName$$Collection.removeAsync(_id); +export function remove$$UpperName$$(_id) { + return $$UpperName$$Collection.removeAsync(_id); } -export const find$$UpperName$$ById = async (_id) => { - return await $$UpperName$$Collection.findOneAsync(_id); +export function find$$UpperName$$ById(_id) { + return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + '$$UpperName$$.create': create$$UpperName$$, + '$$UpperName$$.update': update$$UpperName$$, + '$$UpperName$$.remove': remove$$UpperName$$, + '$$UpperName$$.find': find$$UpperName$$ById }); From 6235fba792745456d94b9da9d975c8f08c63c7b1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:15:28 -0300 Subject: [PATCH 087/293] fix: adressed comments in methods.ts in scaffolds-ts --- tools/static-assets/scaffolds-ts/methods.ts | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 18ab0a171b..68cfebb8a6 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,25 +1,25 @@ -import { Meteor } from 'meteor/meteor' -import { $$UpperName$$ , $$UpperName$$Collection } from './collection'; +import { Meteor } from 'meteor/meteor'; +import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; -export const save$$UpperName$$ = async (data: $$UpperName$$) => { - return await $$UpperName$$Collection.insertAsync({ ...data }); +export function create$$UpperName$$(data: $$UpperName$$Type) { + return $$UpperName$$Collection.insertAsync({ ...data }); } -export const update$$UpperName$$ = async (_id: string, data: Partial<$$UpperName$$>) => { - return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update$$UpperName$$(_id: string, data: Partial<$$UpperName$$Type>) { + return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export const remove$$UpperName$$ = async (_id: string) => { - return await $$UpperName$$Collection.removeAsync(_id); +export function remove$$UpperName$$(_id: string) { + return $$UpperName$$Collection.removeAsync(_id); } -export const find$$UpperName$$ById = async (_id: string) => { - return await $$UpperName$$Collection.findOneAsync(_id); +export function find$$UpperName$$ById(_id: string) { + return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + '$$UpperName$$.create': create$$UpperName$$, + '$$UpperName$$.update': update$$UpperName$$, + '$$UpperName$$.remove': remove$$UpperName$$, + '$$UpperName$$.find': find$$UpperName$$ById }); From 0df94408efb34b1657cedfc5b6f33aaf930bef58 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 20:27:26 -0300 Subject: [PATCH 088/293] addressed comments --- tools/static-assets/scaffolds-js/index.js | 9 ++------- tools/static-assets/scaffolds-ts/index.ts | 10 ++-------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 7ada47967a..3557535d10 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,7 +1,2 @@ -import { $$UpperName$$Collection } from './collection'; -import * as $$UpperName$$ from './methods'; - -export { - $$UpperName$$Collection, - $$UpperName$$ -} +export * from "./collection"; +export * from "./methods"; diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 5d4baf3fed..3557535d10 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,8 +1,2 @@ -import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; -import * as $$UpperName$$ from './methods'; - -export { - $$UpperName$$Type, - $$UpperName$$Collection, - $$UpperName$$ -} +export * from "./collection"; +export * from "./methods"; From ee047e7dc1f443ac3bc6b81b6467e4b8b71d58d8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:14 -0300 Subject: [PATCH 089/293] fixed single quote in index.js --- tools/static-assets/scaffolds-js/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 3557535d10..ccfc548f4e 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,2 +1,2 @@ -export * from "./collection"; -export * from "./methods"; +export * from './collection'; +export * from './methods'; From f72f08665e08755a17f236d8ec4e27dd85208aea Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:24 -0300 Subject: [PATCH 090/293] fixed single quote in index.ts --- tools/static-assets/scaffolds-ts/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 3557535d10..ccfc548f4e 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,2 +1,2 @@ -export * from "./collection"; -export * from "./methods"; +export * from './collection'; +export * from './methods'; From c5636d2608764782f7f41a924f74d76999bb544c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:40 -0300 Subject: [PATCH 091/293] fix: addressed comments in collection.ts --- tools/static-assets/scaffolds-ts/collection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 43d29c2922..217015d82d 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,9 +1,9 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$Type = { +export type $$UpperName$$ = { _id?: string; name: string; createdAt: Date; } -export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); +export const $$UpperName$$Collection = new Mongo.Collection<$$UpperName$$, $$UpperName$$>('$$name$$'); From 0253cc0bb2223536dcbaeba050e183caaeab7da8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:55 -0300 Subject: [PATCH 092/293] fix: updated names in methods.js --- tools/static-assets/scaffolds-js/methods.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 5cfdf95dca..286a8a520f 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,25 @@ import { Meteor } from 'meteor/meteor'; import { $$UpperName$$Collection } from './collection'; -export function create$$UpperName$$(data) { +export function create(data) { return $$UpperName$$Collection.insertAsync({ ...data }); } -export function update$$UpperName$$(_id, data) { +export function update(_id, data) { return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export function remove$$UpperName$$(_id) { +export function remove(_id) { return $$UpperName$$Collection.removeAsync(_id); } -export function find$$UpperName$$ById(_id) { +export function findById(_id) { return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create$$UpperName$$, - '$$UpperName$$.update': update$$UpperName$$, - '$$UpperName$$.remove': remove$$UpperName$$, - '$$UpperName$$.find': find$$UpperName$$ById + '$$UpperName$$.create': create, + '$$UpperName$$.update': update, + '$$UpperName$$.remove': remove, + '$$UpperName$$.find': findById }); From a4e1a00bcac15e80808eeb6b79bea160584df48a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:55:06 -0300 Subject: [PATCH 093/293] fix: updated names in methods.ts --- tools/static-assets/scaffolds-ts/methods.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 68cfebb8a6..1a0989089e 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,25 +1,26 @@ import { Meteor } from 'meteor/meteor'; -import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; +import { Mongo } from 'meteor/mongo'; +import { $$UpperName$$, $$UpperName$$Collection } from './collection'; -export function create$$UpperName$$(data: $$UpperName$$Type) { +export function create(data: $$UpperName$$) { return $$UpperName$$Collection.insertAsync({ ...data }); } -export function update$$UpperName$$(_id: string, data: Partial<$$UpperName$$Type>) { +export function update(_id: string, data: Mongo.Modifier<$$UpperName$$>) { return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export function remove$$UpperName$$(_id: string) { +export function remove(_id: string) { return $$UpperName$$Collection.removeAsync(_id); } -export function find$$UpperName$$ById(_id: string) { +export function findById(_id: string) { return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create$$UpperName$$, - '$$UpperName$$.update': update$$UpperName$$, - '$$UpperName$$.remove': remove$$UpperName$$, - '$$UpperName$$.find': find$$UpperName$$ById + '$$UpperName$$.create': create, + '$$UpperName$$.update': update, + '$$UpperName$$.remove': remove, + '$$UpperName$$.find': findById }); From 4ecfcb10a431bc5c5a2bb9260171d652511339a3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:29 -0300 Subject: [PATCH 094/293] feat: added wizard & template options to generate --- tools/cli/commands.js | 155 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 138 insertions(+), 17 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 241e148e07..4a5caafeed 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1,5 +1,7 @@ var main = require('./main.js'); var _ = require('underscore'); +const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); var files = require('../fs/files'); var deploy = require('../meteor-services/deploy.js'); var buildmessage = require('../utils/buildmessage.js'); @@ -12,6 +14,13 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; +const { + blue, + green, + purple, + red, + yellow +} = require('../console/colors.ts'); var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -2512,30 +2521,95 @@ main.registerCommand({ // generate /////////////////////////////////////////////////////////////////////////////// +/** + * + * @param question + * @returns {Promise} + */ +const ask = async (question) => { + return new Promise((resolve, reject) => { + readline.question(question, (answer) => { + resolve(answer); + }) + }) +} +const sanitizeBoolAnswer = (string) => { -// Examples of generate: -// meteor generate --collection posts -> api/posts/collection.js => Posts -// meteor generate --methods posts -> api/posts/methods.js => Posts -// meteor generate posts ^^ same as above + if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; + + if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; + + Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); + throw main.ShowUsage; +} main.registerCommand({ name: 'generate', maxArgs: 1, - minArgs: 1, + minArgs: 0, options: { path: { type: String }, + methods: { type: Boolean }, + publications: { type: Boolean }, + templatePath : { type: String }, }, pretty: false, catalogRefresh: new catalog.Refresh.Never() -}, function (options) { +}, async function (options) { const { args, appDir } = options; + + + + const setup = async (arg0) => { + if (arg0 === undefined) { + // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model')); + throw main.ShowUsage; + } + const areMethods = await ask('there will be methods? [Y/n] '); + const methods = sanitizeBoolAnswer(areMethods); + const arePublications = await ask('there will be publications? [Y/n] '); + const publications = sanitizeBoolAnswer(arePublications); + const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); + return { + isWizard: true, + scaffoldName, + path, + methods, + publications, + } + } + + const { + path, + methods, + publications + } = options; + + return { + isWizard: false, + scaffoldName: arg0, + path, + methods, + publications, + } + } /** * @type{string} */ - const scaffoldName = args[0]; + const { + isWizard, + scaffoldName, + path, + methods, + publications + } = await setup(args[0]); + // get directory where we will place our files - const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; + const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; if (scaffoldName.includes('/')) throw new main.ShowUsage; @@ -2567,25 +2641,52 @@ main.registerCommand({ if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); else return str.split('-').map(toPascalCase).join(''); } - + const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } /** * * @param name {string} */ const transformName = (name) => { - return name.replace(/\$\$name\$\$|\$\$UpperName\$\$/g, function (substring, args) { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { if (substring === '$$name$$') return scaffoldName; - if (substring === '$$UpperName$$') return toPascalCase(scaffoldName); + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); }) } - + /** + * + * @param content{string} + * @param fileName{string} + * @returns {string} + */ + const removeUnusedLines = (content, fileName) => { + if (methods && publications) return content; + if (!methods && !publications) return content; + if(!fileName.startsWith('index')) return content; + return content + .split('\n') + .filter(line => { + if (!methods && line.includes('methods')) return false; + if (!publications && line.includes('publications')) return false; + return true; + }) + .join('\n'); + } /// Program const rootFiles = getFilesInDir(appDir); if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; const extension = getExtension() const assetsPath = () => { + if (options.templatePath){ + const templatePath = files.pathJoin(appDir, options.templatePath) + Console.info(`Using template that is in: ${purple(templatePath)}`) + return templatePath; + } return files.pathJoin( __dirnameConverted, '..', @@ -2596,15 +2697,35 @@ main.registerCommand({ const isOk = files.mkdir_p(scaffoldPath); // Remember to write that code 2 means that something went wrong on creating the folder if (!isOk) return 2; + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { return transformName(f); }, - transformContents: function (contents, file) { - return transformName(contents.toString()); + transformContents: function (contents, fileName) { + const cleaned = removeUnusedLines(contents.toString(), fileName); + return transformName(cleaned); } }) + const checkAndRemoveFiles = () => { + if (!methods) + files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); + + if (!publications) + files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); + } + + const xor = (a, b) => ( a || b ) && !( a && b ); + + if (!isWizard && xor(methods, publications)) { + checkAndRemoveFiles() + } + + if (isWizard) { + checkAndRemoveFiles() + } + const packageJsonPath = files.pathJoin(appDir, 'package.json'); const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); const packageJson = JSON.parse(packageJsonFile); @@ -2615,13 +2736,13 @@ main.registerCommand({ : files.pathJoin(appDir, 'server', 'main.js'); const mainJs = files.readFile(mainJsPath); const mainJsLines = mainJs.toString().split('\n'); - const importLine = options.path - ? `import '${options.path}';` + const importLine = path + ? `import '${path}';` : `import '/imports/api/${ scaffoldName }';` const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); - Console.info(`Created ${ scaffoldName } scaffold in ${ scaffoldPath }`); + Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); return 0; }); From d2e6d1fb2444b010add7b4296cf7a8215a5c839f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:42 -0300 Subject: [PATCH 095/293] feat: Colors for Meteor CLI --- tools/console/colors.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tools/console/colors.ts diff --git a/tools/console/colors.ts b/tools/console/colors.ts new file mode 100644 index 0000000000..685888c57d --- /dev/null +++ b/tools/console/colors.ts @@ -0,0 +1,14 @@ +type Color = (text: string) => string; +const yellow: Color = (text) => `\x1b[33m${ text }\x1b[0m`; +const red: Color = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; +const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; + +export { + yellow, + red, + purple, + green, + blue, +}; From 8a9b637a6dec6b514e6a8f8585f7e90cd8defa20 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:50 -0300 Subject: [PATCH 096/293] docs: added docs for meteor generate --- tools/cli/help.txt | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index f666f7df38..089b5e48a8 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -842,19 +842,32 @@ environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` >>> generate -Generate boilerplate code for a MeteorJS RPC api. It generates a collection with -the name you pass and its methods. Is JS and TS compatible. -Usage: meteor generate [options] +Generate boilerplate code for a MeteorJS RPC api. +It generates a collection with the name you pass and its methods. +Is JS and TS compatible. No collection name +runs the wizard. + +Usage: meteor generate [] [options] + +By default, generates a collection.ts|js file with the name you pass, +methods(insert, update, remove, find, findOne) in a methods.js|ts file +and publications.js|ts. If you just use the command without collectionName, +it will generate run the wizard, asking you what is necessary. + +We do have as well the templatePath, wich uses the template you pass to generate +the boilerplate code. You can use the default template or create your own. +for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. -Generates a collection.ts|js file with the name you pass and its methods(insert, -update, remove, find, findOne) in a methods.js|ts file. This is a MeteorJS project command. Options: - --help, -h Show this help message. - --path A Path where the files will be generated. Default is the - imports/api directory. + --help Show help. + --path The path to the folder where the files will be generated. Default is the current folder. + --templatePath Path to the template file. + --methods Generate methods. + --publications Generate publications. + >>> publish-release Publish a new meteor release to the package server. From 6bb8e8efe70d37fcdf34af35a9d699819dd537c3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:12 -0300 Subject: [PATCH 097/293] chore: changed collection.js to PascalName --- tools/static-assets/scaffolds-js/collection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js index 88592bbe98..a8a92d7cde 100644 --- a/tools/static-assets/scaffolds-js/collection.js +++ b/tools/static-assets/scaffolds-js/collection.js @@ -1,3 +1,3 @@ import { Mongo } from 'meteor/mongo'; -export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); +export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); From c5ddf4fdaec4872387f02352f3d274d09449add2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:33 -0300 Subject: [PATCH 098/293] feat: added publication template to meteor generate --- tools/static-assets/scaffolds-js/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index ccfc548f4e..59951d14bb 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,2 +1,3 @@ export * from './collection'; export * from './methods'; +export * from './publications'; From 014456a09e7da8b0e7c6f68bb39527115160ae22 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:42 -0300 Subject: [PATCH 099/293] chore: changed methods.js to PascalName --- tools/static-assets/scaffolds-js/methods.js | 22 ++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 286a8a520f..1b7156c792 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,29 @@ import { Meteor } from 'meteor/meteor'; -import { $$UpperName$$Collection } from './collection'; +import { check } from 'meteor/check'; +import { $$PascalName$$Collection } from './collection'; export function create(data) { - return $$UpperName$$Collection.insertAsync({ ...data }); + return $$PascalName$$Collection.insertAsync({ ...data }); } export function update(_id, data) { - return $$UpperName$$Collection.updateAsync(_id, { ...data }); + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); } export function remove(_id) { - return $$UpperName$$Collection.removeAsync(_id); + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); } export function findById(_id) { - return $$UpperName$$Collection.findOneAsync(_id); + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create, - '$$UpperName$$.update': update, - '$$UpperName$$.remove': remove, - '$$UpperName$$.find': findById + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById }); From 804c3e9868264acf88de0aa2c2c268cb3d287aac Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:52 -0300 Subject: [PATCH 100/293] feat: added publications to meteor generate --- tools/static-assets/scaffolds-js/publications.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/publications.js diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js new file mode 100644 index 0000000000..c9f61c4533 --- /dev/null +++ b/tools/static-assets/scaffolds-js/publications.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId() { + return $$PascalName$$Collection.find({ userId: this.userId }); +}); + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); From cc57323eed5acdfa3d13fdc50d1fbaad864dcc76 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:59 -0300 Subject: [PATCH 101/293] chore: changed collection.js to PascalName --- tools/static-assets/scaffolds-ts/collection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 217015d82d..f579cd71a2 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,9 +1,9 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$ = { +export type $$PascalName$$ = { _id?: string; name: string; createdAt: Date; } -export const $$UpperName$$Collection = new Mongo.Collection<$$UpperName$$, $$UpperName$$>('$$name$$'); +export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); From b2013bc1f32e1986263e26cd9f91484a5f576835 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:26:17 -0300 Subject: [PATCH 102/293] feat: added publications to index.ts --- tools/static-assets/scaffolds-ts/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index ccfc548f4e..59951d14bb 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,2 +1,3 @@ export * from './collection'; export * from './methods'; +export * from './publications'; From a4274cac405692d32c828a3e17b535b7623b2ccb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:26:25 -0300 Subject: [PATCH 103/293] chore: changed methods.ts to PascalName --- tools/static-assets/scaffolds-ts/methods.ts | 26 ++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 1a0989089e..538010c1c6 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,26 +1,30 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; -import { $$UpperName$$, $$UpperName$$Collection } from './collection'; +import { check } from 'meteor/check'; +import { $$PascalName$$, $$PascalName$$Collection } from './collection'; -export function create(data: $$UpperName$$) { - return $$UpperName$$Collection.insertAsync({ ...data }); +export function create(data: $$PascalName$$) { + return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier<$$UpperName$$>) { - return $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); } export function remove(_id: string) { - return $$UpperName$$Collection.removeAsync(_id); + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); } export function findById(_id: string) { - return $$UpperName$$Collection.findOneAsync(_id); + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create, - '$$UpperName$$.update': update, - '$$UpperName$$.remove': remove, - '$$UpperName$$.find': findById + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById }); From d3d0f875719520329b4d5f70312b689367e739a9 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:27:17 -0300 Subject: [PATCH 104/293] feat: added publication.ts to meteor generate --- tools/static-assets/scaffolds-ts/publications.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/publications.ts diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts new file mode 100644 index 0000000000..bd960842de --- /dev/null +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('$$PascalName$$sByLoggedUser', function publishTasksByUserId(this) { + return $$PascalName$$Collection.find({ userId: this.userId }); +}); + +Meteor.publish('all$$PascalName$$s', function publishTasks() { + return $$PascalName$$Collection.find({}); +}); From 13c36773b3c1ce6429486a2cd0b6358a0d474ec1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 11:30:54 -0300 Subject: [PATCH 105/293] fix: adjusted publications names --- tools/static-assets/scaffolds-ts/publications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index bd960842de..d8bccbca4c 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publishTasksByUserId(this) { +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this) { return $$PascalName$$Collection.find({ userId: this.userId }); }); -Meteor.publish('all$$PascalName$$s', function publishTasks() { +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 3c0c1f519b9e547d9d6aca5d138c1cf46ac64eb7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 11:31:41 -0300 Subject: [PATCH 106/293] feat: added default options to wizard --- tools/cli/commands.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a5caafeed..2a83c9431a 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2534,13 +2534,14 @@ const ask = async (question) => { }) } const sanitizeBoolAnswer = (string) => { + if (string === '') return true; if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); - throw main.ShowUsage; + throw new main.ShowUsage; } main.registerCommand({ @@ -2566,11 +2567,11 @@ main.registerCommand({ const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); if (scaffoldName === '') { Console.error(red('You must provide a name for your model')); - throw main.ShowUsage; + throw new main.ShowUsage; } - const areMethods = await ask('there will be methods? [Y/n] '); + const areMethods = await ask('there will be methods? press enter for Y [Y/n] '); const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask('there will be publications? [Y/n] '); + const arePublications = await ask('there will be publications? press enter for Y [Y/n] '); const publications = sanitizeBoolAnswer(arePublications); const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); return { From 4101eb4713c90df335092d96180341764b857ce5 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 9 Nov 2022 11:51:35 -0300 Subject: [PATCH 107/293] adding 2.9 migration guide --- guide/source/2.9-migration.md | 102 ++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 guide/source/2.9-migration.md diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md new file mode 100644 index 0000000000..6926ac0459 --- /dev/null +++ b/guide/source/2.9-migration.md @@ -0,0 +1,102 @@ +--- +title: Migrating to Meteor 2.9 +description: How to migrate your application to Meteor 2.9. +--- + +Meteor `2.9` introduces some changes in the `accounts` packages, the new method `Email.sendAsync`, the new method `Meteor.userAsync`, and more. For a complete breakdown of the changes, please refer to the [changelog](http://docs.meteor.com/changelog.html). + + +

Why is this new API important?

+ +You may know that on Meteor we use a package called [Fibers](https://github.com/laverdet/node-fibers). This package is what makes it possible to call an async function inside Meteor in a sync way (without having to wait for the promise to resolve). + +But starting from Node 16, Fibers will stop working, so Meteor needs to move away from Fibers, otherwise, we'll be stuck on Node 14. + +If you want to know more about the plan, you can check this [discussion](https://github.com/meteor/meteor/discussions/11505). + +

Why doing this change now?

+ +This will be a considerable change for older Meteor applications, and some parts of the code of any Meteor app will have to be adjusted eventually. So it's important to start the migration process as soon as possible. + +The migration process started in version 2.8. We recommend you [check that out](2.8-migration.htm) first in case you skipped. + +

Can I update to this version without changing my app?

+ +Yes. You can update to this version without changing your app. + +

What's new?

+ +Let's start with the accounts and OAuth packages. Some methods had to be restructured to work without Fibers in the future. The current methods will continue working as of today, but if you use some of the methods we'll mention below in custom login packages, we recommend you adapt them. + +Internal methods that are now async: + +- **_attemptLogin** +- **_loginMethod** +- **_runLoginHandlers** +- **Accounts._checkPassword**: still exist but returns a promise, and it has a new version called `Accounts._checkPasswordAsync`. + + +We also have changes to asynchronous context in the registry of handlers for OAuth services. + +Now, the OAuth.Register method accepts an async handler, and it is possible to use the await option internally, avoiding to use methods that run on Fibers, such as **HTTP** (deprecated Meteor package), `Meteor.wrapAsync` and `Promise.await`. + +Before the changes you would have something like: + +```js +OAuth.registerService('github', 2, null, (query) => { + const accessTokenCall = Meteor.wrapAsync(getAccessToken); + const accessToken = accessTokenCall(query); + const identityCall = Meteor.wrapAsync(getIdentity); +… +}); +``` + +Now you have: + +```js +OAuth.registerService('github', 2, null, async (query) => { + const accessToken = await getAccessToken(query); + const identity = await getIdentity(accessToken); + const emails = await getEmails(accessToken); +… +}); +``` + +

New async methods

+ +We now have async version of methods that you already use. They are: + +- [Email.sendAsync()](https://github.com/meteor/meteor/pull/12101/files#diff-b2453acdfd34fb563a1e258956d2733ab06a2aa77c87e402cfa53a86a48133a8R86-R107) +- [Meteor.userAsync()](https://github.com/meteor/meteor/pull/12274) +- [CssTools.minifyCssAsync()](https://github.com/meteor/meteor/pull/12105) + +

Accounts-base without service-configuration

+ +Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. + +

Migrating from a version older than 2.8?

+ +If you're migrating from a version of Meteor older than Meteor 2.8, there may be important considerations not listed in this guide. Please review the older migration guides for details: + +* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7) +* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6) +* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5) +* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4) +* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3) +* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2) +* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0) +* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12) +* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11) +* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2) +* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10) +* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3) +* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9) +* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3) +* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2) +* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8) +* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7) +* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6) +* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5) +* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4) +* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3) +* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2) From 58563977f20c1d276a55dcca8134787de192ba96 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 9 Nov 2022 11:54:39 -0300 Subject: [PATCH 108/293] Fixing typo in the migration guide and adding it to _config.yml --- guide/_config.yml | 3 ++- guide/source/2.9-migration.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/guide/_config.yml b/guide/_config.yml index 7a99eb70f2..a28b565f8f 100644 --- a/guide/_config.yml +++ b/guide/_config.yml @@ -5,6 +5,7 @@ edit_branch: 'devel' edit_path: 'guide' content_root: 'content' versions: + - '2.9' - '2.8' - '2.7' - '2.6' @@ -37,7 +38,7 @@ sidebar_categories: - index - code-style - structure - - 2.8-migration + - 2.9-migration Data: - collections - data-loading diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md index 6926ac0459..52c688ca53 100644 --- a/guide/source/2.9-migration.md +++ b/guide/source/2.9-migration.md @@ -70,7 +70,7 @@ We now have async version of methods that you already use. They are: - [Meteor.userAsync()](https://github.com/meteor/meteor/pull/12274) - [CssTools.minifyCssAsync()](https://github.com/meteor/meteor/pull/12105) -

Accounts-base without service-configuration

+

Accounts-base without service-configuration

Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. From e553623a6ea92a5c037ffd81c005d8e729b69855 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 12:27:54 -0300 Subject: [PATCH 109/293] feat: added replaceFn --- tools/cli/commands.js | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 2a83c9431a..594cd459e1 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2553,6 +2553,7 @@ main.registerCommand({ methods: { type: Boolean }, publications: { type: Boolean }, templatePath : { type: String }, + replaceFn : { type: String }, }, pretty: false, catalogRefresh: new catalog.Refresh.Never() @@ -2560,7 +2561,6 @@ main.registerCommand({ const { args, appDir } = options; - const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors @@ -2633,6 +2633,27 @@ main.registerCommand({ else return 'js' } + /** + * + * @returns {string} + */ + const userTransformFilenameFn = (filename) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformFilename; + if (typeof replaceFn !== 'function') throw new main.ShowUsage; + return replaceFn(scaffoldName, filename); + } + /** + * + * @returns {string} + */ + const userTransformContentsFn = (contents, fileName) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformContents; + if (typeof replaceFn !== 'function') throw new main.ShowUsage; + return replaceFn(scaffoldName, contents, fileName); + } + /** * if contains - turns into pascal * @param str{string} @@ -2646,6 +2667,7 @@ main.registerCommand({ if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); else return str.split('-').map(toPascalCase).join(''); } + /** * * @param name {string} @@ -2701,9 +2723,11 @@ main.registerCommand({ files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { + if (options.replaceFn) return userTransformFilenameFn(f); return transformName(f); }, transformContents: function (contents, fileName) { + if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); const cleaned = removeUnusedLines(contents.toString(), fileName); return transformName(cleaned); } From a67dddbd78060b211161cac8840ab49b6a38f58d Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 9 Nov 2022 13:48:35 -0300 Subject: [PATCH 110/293] Changing Accounts._checkPassword for sync again and updating migration guide --- guide/source/2.9-migration.md | 2 +- packages/accounts-password/password_server.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md index 52c688ca53..6da327420a 100644 --- a/guide/source/2.9-migration.md +++ b/guide/source/2.9-migration.md @@ -33,7 +33,7 @@ Internal methods that are now async: - **_attemptLogin** - **_loginMethod** - **_runLoginHandlers** -- **Accounts._checkPassword**: still exist but returns a promise, and it has a new version called `Accounts._checkPasswordAsync`. +- **Accounts._checkPassword**: still works as always, but now has a new version called `Accounts._checkPasswordAsync`. We also have changes to asynchronous context in the registry of handlers for OAuth services. diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index 812bf848d1..c44be77f66 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -98,7 +98,7 @@ const checkPasswordAsync = async (user, password) => { return result; }; -const checkPassword = async (user, password) => { +const checkPassword = (user, password) => { return Promise.await(checkPasswordAsync(user, password)); }; From 6d5aca9a52ac037a2145ebc535c1d34cd47990ab Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:19:38 -0300 Subject: [PATCH 111/293] fix: added types to stop the no-infer-any --- tools/static-assets/scaffolds-ts/publications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index d8bccbca4c..6b6e7b6b24 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,7 +1,7 @@ -import { Meteor } from 'meteor/meteor'; +import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this) { +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this: Subscription) { return $$PascalName$$Collection.find({ userId: this.userId }); }); From efb77200064add8008e1a68950751ae6327dc0ef Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:41:01 -0300 Subject: [PATCH 112/293] docs: added meaningful messages --- tools/cli/commands.js | 68 +++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 594cd459e1..d6e3553620 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2540,7 +2540,8 @@ const sanitizeBoolAnswer = (string) => { if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; - Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); + Console.error(red('You must provide a valid answer')); + Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); throw new main.ShowUsage; } @@ -2560,18 +2561,39 @@ main.registerCommand({ }, async function (options) { const { args, appDir } = options; + /** + * simple verification fot the name + * @param scaffoldName {string} + */ + const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Names should not be empty.')); + throw new main.ShowUsage; + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Names should not contain slashes.')); + throw new main.ShowUsage; + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Names should not contain special characters except _ and -')); + throw new main.ShowUsage; + } + } const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model')); - throw new main.ShowUsage; - } - const areMethods = await ask('there will be methods? press enter for Y [Y/n] '); + checkScaffoldName(scaffoldName); + const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask('there will be publications? press enter for Y [Y/n] '); + const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); const publications = sanitizeBoolAnswer(arePublications); const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); return { @@ -2608,15 +2630,10 @@ main.registerCommand({ publications } = await setup(args[0]); - + checkScaffoldName(scaffoldName); // get directory where we will place our files const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; - if (scaffoldName.includes('/')) throw new main.ShowUsage; - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; - /** * * @param appDir @@ -2640,7 +2657,11 @@ main.registerCommand({ const userTransformFilenameFn = (filename) => { const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); const replaceFn = require(path).transformFilename; - if (typeof replaceFn !== 'function') throw new main.ShowUsage; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformFilename.')); + Console.error(yellow('The function should be named transformFilename and should be exported.')); + throw new main.ShowUsage; + } return replaceFn(scaffoldName, filename); } /** @@ -2650,7 +2671,11 @@ main.registerCommand({ const userTransformContentsFn = (contents, fileName) => { const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); const replaceFn = require(path).transformContents; - if (typeof replaceFn !== 'function') throw new main.ShowUsage; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformContents.')); + Console.error(yellow('The function should be named transformContents and should be exported.')); + throw new main.ShowUsage; + } return replaceFn(scaffoldName, contents, fileName); } @@ -2701,7 +2726,11 @@ main.registerCommand({ } /// Program const rootFiles = getFilesInDir(appDir); - if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; + if (!rootFiles.includes('.meteor')) { + Console.error(red('You must be in a Meteor project to run this command')); + Console.error(yellow('You can create a new Meteor project with `meteor create`')); + throw new main.ShowUsage; + } const extension = getExtension() const assetsPath = () => { @@ -2718,8 +2747,11 @@ main.registerCommand({ } // create directory const isOk = files.mkdir_p(scaffoldPath); - // Remember to write that code 2 means that something went wrong on creating the folder - if (!isOk) return 2; + if (!isOk) { + Console.error(red('Something went wrong when creating the folder')); + Console.error(yellow('Do you have the correct permissions?')); + return 2; + } files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { From 1b60c2c5027d07b8a4b6cf1fd1d0393aed2fbdc2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:43:43 -0300 Subject: [PATCH 113/293] fix: updated status codes --- tools/cli/commands.js | 61 ++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index d6e3553620..fb3960f4a8 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2533,6 +2533,7 @@ const ask = async (question) => { }) }) } + const sanitizeBoolAnswer = (string) => { if (string === '') return true; @@ -2542,7 +2543,32 @@ const sanitizeBoolAnswer = (string) => { Console.error(red('You must provide a valid answer')); Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); +} + +/** + * simple verification for the name + * @param scaffoldName {string} + */ +const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Model names should not be empty.')); + throw new main.ExitWithCode(2); + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain slashes.')); + throw new main.ExitWithCode(2); + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain special characters except _ and -')); + throw new main.ExitWithCode(2); + } } main.registerCommand({ @@ -2561,31 +2587,6 @@ main.registerCommand({ }, async function (options) { const { args, appDir } = options; - /** - * simple verification fot the name - * @param scaffoldName {string} - */ - const checkScaffoldName = (scaffoldName) => { - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model.')); - Console.error(yellow('Names should not be empty.')); - throw new main.ShowUsage; - } - - if (scaffoldName.includes('/')) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Names should not contain slashes.')); - throw new main.ShowUsage; - } - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Names should not contain special characters except _ and -')); - throw new main.ShowUsage; - } - } - const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors @@ -2660,7 +2661,7 @@ main.registerCommand({ if (typeof replaceFn !== 'function') { Console.error(red('You must provide a valid function transformFilename.')); Console.error(yellow('The function should be named transformFilename and should be exported.')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } return replaceFn(scaffoldName, filename); } @@ -2674,7 +2675,7 @@ main.registerCommand({ if (typeof replaceFn !== 'function') { Console.error(red('You must provide a valid function transformContents.')); Console.error(yellow('The function should be named transformContents and should be exported.')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } return replaceFn(scaffoldName, contents, fileName); } @@ -2729,7 +2730,7 @@ main.registerCommand({ if (!rootFiles.includes('.meteor')) { Console.error(red('You must be in a Meteor project to run this command')); Console.error(yellow('You can create a new Meteor project with `meteor create`')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } const extension = getExtension() @@ -2750,7 +2751,7 @@ main.registerCommand({ if (!isOk) { Console.error(red('Something went wrong when creating the folder')); Console.error(yellow('Do you have the correct permissions?')); - return 2; + throw new main.ExitWithCode(2); } files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { From 06d947dcb9183a5c43434c42d91d19b583c2b0b2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 11:54:29 -0300 Subject: [PATCH 114/293] fix: to not compile static scaffolds --- tools/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 234b36f9bc..88e1ef394b 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,6 +29,7 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**" + "./static-assets/skel*/**", + "./static-assets/scaffolds*/**", ] } From edf4ed4c48cfe4f0137c542413af1980623dbe6b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 14:40:22 -0300 Subject: [PATCH 115/293] docs: updated commandline with the new generate command --- docs/source/commandline.md | 321 +++++++++++++++++++++++++++++++++++++ 1 file changed, 321 insertions(+) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..5dac73737f 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -184,6 +184,327 @@ Create a basic [solid](https://www.solidjs.com/) app. | [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +

meteor generate

+ +``meteor generate`` is a command for generating scaffolds for your current project. when ran without arguments, it will ask +you what is the name of the model you want to generate, if you do want methods for your api and publications. It can be +used as a command line only operation as well. + +running +```bash +meteor generate customer + +``` + +it will generate the following code in ``/imports/api`` +![Screenshot 2022-11-09 at 11 28 29](https://user-images.githubusercontent.com/70247653/200856551-71c100f5-8714-4b34-9678-4f08780dcc8b.png) + +that will have the following code: + + +

collection.js

+ +```js + + import { Mongo } from 'meteor/mongo'; + +export const CustomerCollection = new Mongo.Collection('customer'); + +``` + + + +

methods.js

+ +```js +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import { CustomerCollection } from './collection'; + +export function create(data) { + return CustomerCollection.insertAsync({ ...data }); +} + +export function update(_id, data) { + check(_id, String); + return CustomerCollection.updateAsync(_id, { ...data }); +} + +export function remove(_id) { + check(_id, String); + return CustomerCollection.removeAsync(_id); +} + +export function findById(_id) { + check(_id, String); + return CustomerCollection.findOneAsync(_id); +} + +Meteor.methods({ + 'Customer.create': create, + 'Customer.update': update, + 'Customer.remove': remove, + 'Customer.find': findById +}); + +``` + + + + + +

publication.js

+ +```js + +import { Meteor } from 'meteor/meteor'; +import { CustomerCollection } from './collection'; + +Meteor.publish('CustomersByLoggedUser', function publishCustomersByUserId() { + return CustomerCollection.find({ userId: this.userId }); +}); + +Meteor.publish('allCustomers', function publishCustomers() { + return CustomerCollection.find({}); +}); + + +``` + + + + + + +

index.js

+ +```js + +export * from './collection'; +export * from './methods'; +export * from './publications'; + +``` + + + + +Also, there is the same version of these methods using TypeScript, that will be shown bellow. + +

path option

+ +for those that may want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. +It will generate the model in that path. Note that I'm using TypeScript in this example. + +```bash + +meteor generate another-customer --path=server/admin + +``` + +it will generate in ``server/admin`` the another-client code: + +![Screenshot 2022-11-09 at 11 32 39](https://user-images.githubusercontent.com/70247653/200857560-a4874e4c-1078-4b7a-9381-4c6590d2f63b.png) + + +

collection.ts

+ +```typescript + +import { Mongo } from 'meteor/mongo'; + +export type AnotherCustomer = { + _id?: string; + name: string; + createdAt: Date; +} + +export const AnotherCustomerCollection = new Mongo.Collection('another-customer'); + +``` + +

methods.ts

+ +```typescript + +import { Meteor } from 'meteor/meteor'; +import { Mongo } from 'meteor/mongo'; +import { check } from 'meteor/check'; +import { AnotherCustomer, AnotherCustomerCollection } from './collection'; + +export function create(data: AnotherCustomer) { + return AnotherCustomerCollection.insertAsync({ ...data }); +} + +export function update(_id: string, data: Mongo.Modifier) { + check(_id, String); + return AnotherCustomerCollection.updateAsync(_id, { ...data }); +} + +export function remove(_id: string) { + check(_id, String); + return AnotherCustomerCollection.removeAsync(_id); +} + +export function findById(_id: string) { + check(_id, String); + return AnotherCustomerCollection.findOneAsync(_id); +} + +Meteor.methods({ + 'AnotherCustomer.create': create, + 'AnotherCustomer.update': update, + 'AnotherCustomer.remove': remove, + 'AnotherCustomer.find': findById +}); + + +``` + + + +

publications.ts

+ +```typescript + +import { Meteor } from 'meteor/meteor'; +import { AnotherCustomerCollection } from './collection'; + +Meteor.publish('AnotherCustomersByLoggedUser', function publishAnotherCustomersByUserId(this) { + return AnotherCustomerCollection.find({ userId: this.userId }); +}); + +Meteor.publish('allAnotherCustomers', function publishAnotherCustomers() { + return AnotherCustomerCollection.find({}); +}); + +``` + + + +

index.ts

+ +```typescript + +export * from './collection'; +export * from './methods'; +export * from './publications'; + +``` + + + +--- + + +

Using the Wizard

+ + +if you run the following command: + +```bash +meteor generate +``` + +it will prompt the following questions. + +![Screenshot 2022-11-09 at 11 38 29](https://user-images.githubusercontent.com/70247653/200859087-a2ef63b6-7ac1-492b-8918-0630cbd30686.png) + + + + +--- + +

Using your own template

+ +`--templatePath` + +```bash +meteor generate feed --templatePath=/scaffolds-ts +``` +![Screenshot 2022-11-09 at 11 42 47](https://user-images.githubusercontent.com/70247653/200860178-2341befe-bcfd-422f-a4bd-7c9918abfd97.png) + +> Note that this is not a CLI framework inside meteor but just giving some solutions for really common problems out of the box. +> Check out Yargs, Inquirer or Commander for more information about CLI frameworks. + + +You can use your own templates for scaffolding your specific workloads. To do that, you should pass in a template directory URL so that it can copy it with its changes. + +

how do I rename things?

+ +Out of the box I provide a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` + +these replacements come from this function: + +_note that scaffoldName is the name that you have passed as argument_ + +```js +const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + } +``` + +

What if I want to have my own way of templating?

+ +`--replaceFn` + +There is an option called ``--replaceFn`` that when you pass in given a .js file with two functions it will override all templating that we have defaulted to use your given function. +_example of a replacer file_ +```js +export function transformFilename(scaffoldName, filename) { + console.log(scaffoldName, filename); + return filename +} + +export function transformContents(scaffoldName, contents, fileName) { + console.log(fileName, contents); + return contents +} + +``` +if you run your command like this: + +```bash + meteor generate feed --replaceFn=/fn/replace.js +``` +it will generate files full of ``$$PascalCase$$``using the meteor provided templates. + +A better example of this feature would be the following js file: +```js +const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); +} +const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); +} + +const transformName = (scaffoldName, str) => { + return str.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + +} + +export function transformFilename(scaffoldName, filename) { + return transformName(scaffoldName, filename); +} + +export function transformContents(scaffoldName, contents, fileName) { + return transformName(scaffoldName, contents); +} +``` + + + +

meteor login / logout

Log in and out of your account using Meteor's authentication system. From de8354b960aec0180d93812cc5ed38eeb9ff3fbb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 14:40:40 -0300 Subject: [PATCH 116/293] added ref to the docs in help.txt for generate command --- tools/cli/help.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 089b5e48a8..a8eaa83e59 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -864,7 +864,8 @@ This is a MeteorJS project command. Options: --help Show help. --path The path to the folder where the files will be generated. Default is the current folder. - --templatePath Path to the template file. + --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. --methods Generate methods. --publications Generate publications. From 2ad403a89e3b079bf16e1ecd0a9dce9a3232e13d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:11:06 -0300 Subject: [PATCH 117/293] fix: updated color.ts --- tools/console/colors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/console/colors.ts b/tools/console/colors.ts index 685888c57d..bb22b5dcc5 100644 --- a/tools/console/colors.ts +++ b/tools/console/colors.ts @@ -5,7 +5,7 @@ const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; -export { +exports.colors = { yellow, red, purple, From 37e0903bd5c5909ea0c521436c13a0263dff6c5b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:11:23 -0300 Subject: [PATCH 118/293] fix: trying to make test pass for cli --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index fb3960f4a8..46fcdcf352 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -20,7 +20,7 @@ const { purple, red, yellow -} = require('../console/colors.ts'); +} = require('../console/colors.ts').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); From 5813cbf12517bc8f17dbc239e5bb91e2a53984ff Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:23 -0300 Subject: [PATCH 119/293] feat: added colors to Console.js --- tools/console/console.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/console/console.js b/tools/console/console.js index 9cad2b5cc1..564d761aab 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,4 +1320,19 @@ class Console extends ConsoleBase { } } +const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; +const red = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple = (text) => `\x1b[35m${ text }\x1b[0m`; +const green = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue = (text) => `\x1b[34m${ text }\x1b[0m`; + +const colors = { + yellow, + red, + purple, + green, + blue, +}; + +exports.colors = colors; exports.Console = new Console; From 7910581017c2fd196dae23f1d79ceef3ed3fbf71 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:39 -0300 Subject: [PATCH 120/293] removed: colors.ts does not pass in tests --- tools/console/colors.ts | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 tools/console/colors.ts diff --git a/tools/console/colors.ts b/tools/console/colors.ts deleted file mode 100644 index bb22b5dcc5..0000000000 --- a/tools/console/colors.ts +++ /dev/null @@ -1,14 +0,0 @@ -type Color = (text: string) => string; -const yellow: Color = (text) => `\x1b[33m${ text }\x1b[0m`; -const red: Color = (text) => `\x1b[31m${ text }\x1b[0m`; -const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; -const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; -const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; - -exports.colors = { - yellow, - red, - purple, - green, - blue, -}; From d0f943f6620d03fee38bc1033c0f08342b15c725 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:54 -0300 Subject: [PATCH 121/293] feat: updated imports for commands.js --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 46fcdcf352..b95c4908b9 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -20,7 +20,7 @@ const { purple, red, yellow -} = require('../console/colors.ts').colors; +} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); From 0a34bf6cde26c8782c01d824aec90b42a0611040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 11 Nov 2022 13:52:30 +0100 Subject: [PATCH 122/293] Added basic documentation. --- packages/mongo/collection.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 9185e1c13d..d5b99edae4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,10 +319,30 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + /** + * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. + * @locus Anywhere + * @method countDocuments + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ countDocuments(...args) { return this._collection.countDocuments(...args); }, + /** + * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. + * @locus Anywhere + * @method estimatedDocumentCount + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ estimatedDocumentCount(...args) { return this._collection.estimatedDocumentCount(...args); }, From f83f9f8efb5c074b253f2553453400b4afd12187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 11 Nov 2022 13:52:41 +0100 Subject: [PATCH 123/293] Added atom conversion. --- packages/mongo/mongo_driver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index da21e037e2..9a45966545 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -820,11 +820,13 @@ MongoConnection.prototype.createIndex = function (collectionName, index, }; MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); const collection = this.rawCollection(collectionName); return collection.countDocuments(...args); }; MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); const collection = this.rawCollection(collectionName); return collection.estimatedDocumentCount(...args); }; From 69de5f9862b21befd8035ce0b0a4cbb3f8cdc393 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:43:18 -0300 Subject: [PATCH 124/293] add vue-2 and vue-3 to cli --- tools/cli/commands.js | 4 +++- tools/cli/help.txt | 5 +++-- tools/static-assets/README.md | 8 ++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..b225c2b15d 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -533,6 +533,7 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, + 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, @@ -905,7 +906,8 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue-based app"); + cmd("meteor create --vue # to create a basic Vue3-based app"); + cmd("meteor create --vue-2 # to create a basic Vue2-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 8091e7b025..391866e70d 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,7 +183,8 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue-based app. + --vue Create a basic vue3-based app. + --vue-2 Create a basic vue2-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index db232e18af..1884abb1d6 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,6 +40,14 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. +## skel-vue - Package Skeleton + +Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. + +## skel-vue-2 - Package Skeleton + +Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. + ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on From 416cbe32db193f21b4aa3599cd6eb56888185c3b Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:44:37 -0300 Subject: [PATCH 125/293] update vue-2 folder --- tools/static-assets/{skel-vue => skel-vue-2}/.gitignore | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/.gitignore | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/packages | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/platforms | 0 tools/static-assets/{skel-vue => skel-vue-2}/client/main.html | 0 tools/static-assets/{skel-vue => skel-vue-2}/client/main.js | 0 .../{skel-vue => skel-vue-2}/imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../{skel-vue => skel-vue-2}/imports/api/fixtures.js | 0 .../{skel-vue => skel-vue-2}/imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../{skel-vue => skel-vue-2}/imports/api/methods/index.js | 0 .../{skel-vue => skel-vue-2}/imports/api/publications/index.js | 0 .../{skel-vue => skel-vue-2}/imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/App.vue | 0 .../{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue | 0 .../{skel-vue => skel-vue-2}/imports/ui/components/Info.vue | 0 .../static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/package.json | 0 tools/static-assets/{skel-vue => skel-vue-2}/server/main.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/tests/main.js | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename tools/static-assets/{skel-vue => skel-vue-2}/.gitignore (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/.gitignore (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/packages (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/platforms (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/client/main.html (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/client/main.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/fixtures.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/App.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Info.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/package.json (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/server/main.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/tests/main.js (100%) diff --git a/tools/static-assets/skel-vue/.gitignore b/tools/static-assets/skel-vue-2/.gitignore similarity index 100% rename from tools/static-assets/skel-vue/.gitignore rename to tools/static-assets/skel-vue-2/.gitignore diff --git a/tools/static-assets/skel-vue/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore similarity index 100% rename from tools/static-assets/skel-vue/.meteor/.gitignore rename to tools/static-assets/skel-vue-2/.meteor/.gitignore diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages similarity index 100% rename from tools/static-assets/skel-vue/.meteor/packages rename to tools/static-assets/skel-vue-2/.meteor/packages diff --git a/tools/static-assets/skel-vue/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms similarity index 100% rename from tools/static-assets/skel-vue/.meteor/platforms rename to tools/static-assets/skel-vue-2/.meteor/platforms diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue-2/client/main.html similarity index 100% rename from tools/static-assets/skel-vue/client/main.html rename to tools/static-assets/skel-vue-2/client/main.html diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue-2/client/main.js similarity index 100% rename from tools/static-assets/skel-vue/client/main.js rename to tools/static-assets/skel-vue-2/client/main.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/fixtures.js b/tools/static-assets/skel-vue-2/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/fixtures.js rename to tools/static-assets/skel-vue-2/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/index.js b/tools/static-assets/skel-vue-2/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/index.js rename to tools/static-assets/skel-vue-2/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/index.js b/tools/static-assets/skel-vue-2/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/index.js rename to tools/static-assets/skel-vue-2/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/App.vue rename to tools/static-assets/skel-vue-2/imports/ui/App.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Info.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/plugins.js b/tools/static-assets/skel-vue-2/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/plugins.js rename to tools/static-assets/skel-vue-2/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue-2/package.json similarity index 100% rename from tools/static-assets/skel-vue/package.json rename to tools/static-assets/skel-vue-2/package.json diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue-2/server/main.js similarity index 100% rename from tools/static-assets/skel-vue/server/main.js rename to tools/static-assets/skel-vue-2/server/main.js diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js similarity index 100% rename from tools/static-assets/skel-vue/tests/main.js rename to tools/static-assets/skel-vue-2/tests/main.js From e5a25952f685a5dabdbbcb03f6d02d262b407efc Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:48:09 -0300 Subject: [PATCH 126/293] add vue-3 skel folder --- tools/static-assets/skel-vue/.gitignore | 1 + .../skel-vue/.meteor/.finished-upgraders | 19 +++++ .../static-assets/skel-vue/.meteor/.gitignore | 1 + tools/static-assets/skel-vue/.meteor/.id | 7 ++ tools/static-assets/skel-vue/.meteor/packages | 21 ++++++ .../static-assets/skel-vue/.meteor/platforms | 2 + tools/static-assets/skel-vue/.meteor/release | 1 + tools/static-assets/skel-vue/.meteor/versions | 71 +++++++++++++++++++ tools/static-assets/skel-vue/README.md | 19 +++++ tools/static-assets/skel-vue/client/main.css | 3 + tools/static-assets/skel-vue/client/main.html | 16 +++++ tools/static-assets/skel-vue/client/main.js | 1 + .../skel-vue/imports/api/links.js | 10 +++ .../skel-vue/imports/ui/About.vue | 5 ++ .../static-assets/skel-vue/imports/ui/App.vue | 10 +++ .../skel-vue/imports/ui/AppMenu.vue | 6 ++ .../skel-vue/imports/ui/Hello.vue | 16 +++++ .../skel-vue/imports/ui/Home.vue | 10 +++ .../skel-vue/imports/ui/Info.vue | 16 +++++ .../static-assets/skel-vue/imports/ui/main.js | 13 ++++ .../skel-vue/imports/ui/router.js | 18 +++++ tools/static-assets/skel-vue/package.json | 33 +++++++++ .../static-assets/skel-vue/postcss.config.js | 6 ++ tools/static-assets/skel-vue/server/main.js | 31 ++++++++ .../static-assets/skel-vue/tailwind.config.js | 8 +++ tools/static-assets/skel-vue/tests/main.js | 20 ++++++ tools/static-assets/skel-vue/vite.config.js | 12 ++++ 27 files changed, 376 insertions(+) create mode 100644 tools/static-assets/skel-vue/.gitignore create mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders create mode 100644 tools/static-assets/skel-vue/.meteor/.gitignore create mode 100644 tools/static-assets/skel-vue/.meteor/.id create mode 100644 tools/static-assets/skel-vue/.meteor/packages create mode 100644 tools/static-assets/skel-vue/.meteor/platforms create mode 100644 tools/static-assets/skel-vue/.meteor/release create mode 100644 tools/static-assets/skel-vue/.meteor/versions create mode 100644 tools/static-assets/skel-vue/README.md create mode 100644 tools/static-assets/skel-vue/client/main.css create mode 100644 tools/static-assets/skel-vue/client/main.html create mode 100644 tools/static-assets/skel-vue/client/main.js create mode 100644 tools/static-assets/skel-vue/imports/api/links.js create mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/App.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/main.js create mode 100644 tools/static-assets/skel-vue/imports/ui/router.js create mode 100644 tools/static-assets/skel-vue/package.json create mode 100644 tools/static-assets/skel-vue/postcss.config.js create mode 100644 tools/static-assets/skel-vue/server/main.js create mode 100644 tools/static-assets/skel-vue/tailwind.config.js create mode 100644 tools/static-assets/skel-vue/tests/main.js create mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/tools/static-assets/skel-vue/.gitignore b/tools/static-assets/skel-vue/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-vue/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.gitignore b/tools/static-assets/skel-vue/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id new file mode 100644 index 0000000000..dd363b2513 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages new file mode 100644 index 0000000000..2565a5fe32 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -0,0 +1,21 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base@1.5.1 # Packages every Meteor app needs to have +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.16.0 # The database Meteor supports right now +reactive-var@1.0.11 # Reactive variable for tracker + +standard-minifier-css@1.8.2 # CSS minifier run for production mode +standard-minifier-js@2.8.1 # JS minifier run for production mode +es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers +ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code +typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules +shell-server@0.5.0 # Server-side component of the `meteor shell` command +hot-module-replacement@0.5.1 # Update client in development without reloading the page + +static-html@1.3.2 # Define static page content in .html files +vite:bundler diff --git a/tools/static-assets/skel-vue/.meteor/platforms b/tools/static-assets/skel-vue/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release new file mode 100644 index 0000000000..1d2a6d0f79 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/release @@ -0,0 +1 @@ +METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions new file mode 100644 index 0000000000..3b89f7359b --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/versions @@ -0,0 +1,71 @@ +allow-deny@1.1.1 +autoupdate@1.8.0 +babel-compiler@7.9.2 +babel-runtime@1.5.1 +base64@1.0.12 +binary-heap@1.0.11 +blaze-tools@1.1.3 +boilerplate-generator@1.7.1 +caching-compiler@1.2.2 +caching-html-compiler@1.2.1 +callback-hook@1.4.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.6.0 +ddp-common@1.4.0 +ddp-server@2.6.0 +diff-sequence@1.1.1 +dynamic-import@0.7.2 +ecmascript@0.16.2 +ecmascript-runtime@0.8.0 +ecmascript-runtime-client@0.12.1 +ecmascript-runtime-server@0.11.0 +ejson@1.1.2 +es5-shim@4.8.0 +fetch@0.1.1 +geojson-utils@1.0.10 +hot-code-push@1.0.4 +hot-module-replacement@0.5.1 +html-tools@1.1.3 +htmljs@1.1.1 +id-map@1.1.1 +inter-process-messaging@0.1.1 +launch-screen@1.3.0 +logging@1.3.1 +meteor@1.10.1 +meteor-base@1.5.1 +minifier-css@1.6.1 +minifier-js@2.7.5 +minimongo@1.9.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.8 +modules@0.19.0 +modules-runtime@0.13.0 +modules-runtime-hot@0.14.0 +mongo@1.16.0 +mongo-decimal@0.1.3 +mongo-dev-server@1.1.0 +mongo-id@1.0.8 +npm-mongo@4.9.0 +ordered-dict@1.1.0 +promise@0.12.0 +random@1.2.0 +react-fast-refresh@0.2.3 +reactive-var@1.0.11 +reload@1.3.1 +retry@1.1.0 +routepolicy@1.1.1 +shell-server@0.5.0 +socket-stream-client@0.5.0 +spacebars-compiler@1.3.1 +standard-minifier-css@1.8.2 +standard-minifier-js@2.8.1 +static-html@1.3.2 +templating-tools@1.2.2 +tracker@1.2.0 +typescript@4.5.4 +underscore@1.0.10 +vite:bundler@0.1.9 +webapp@1.13.1 +webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md new file mode 100644 index 0000000000..7ba6226cb0 --- /dev/null +++ b/tools/static-assets/skel-vue/README.md @@ -0,0 +1,19 @@ +# Meteor + Vue3 + Vite + +This is a simple example of how to use Vue3 with Meteor. + +## How to use + +1. Clone this repo +2. Run `meteor npm install` +3. Run `meteor` +4. Open `http://localhost:3000` in your browser + +## Libraries used + +- [Vue3](https://v3.vuejs.org/) +- [Vite](https://vitejs.dev/) +- [Vue Router](https://next.router.vuejs.org/) +- [Meteor](https://www.meteor.com/) +- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) +- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html new file mode 100644 index 0000000000..9e2393399c --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.html @@ -0,0 +1,16 @@ + + ~name~ + + + + + + + + + +
+ diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js new file mode 100644 index 0000000000..97d382a9bd --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.js @@ -0,0 +1 @@ +// main entry point is in imports/ui/main.jsx diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js new file mode 100644 index 0000000000..4e98fcca62 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/links.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor' +import { Mongo } from 'meteor/mongo' + +export const LinksCollection = new Mongo.Collection('links') + +if (Meteor.isServer) { + Meteor.publish('links', function () { + return LinksCollection.find({}) + }) +} diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue new file mode 100644 index 0000000000..d1ba384f1b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/About.vue @@ -0,0 +1,5 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue new file mode 100644 index 0000000000..7a775391cb --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue new file mode 100644 index 0000000000..5b1997efec --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue @@ -0,0 +1,6 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue new file mode 100644 index 0000000000..ebe691f4d2 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Hello.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue new file mode 100644 index 0000000000..0473845661 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Home.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue new file mode 100644 index 0000000000..5a17339c53 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Info.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js new file mode 100644 index 0000000000..e3500841ea --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/main.js @@ -0,0 +1,13 @@ +import { Meteor } from 'meteor/meteor' +import { createApp } from 'vue' +import { VueMeteor } from 'vue-meteor-tracker' + +import App from './App.vue' +import { router } from './router' + +Meteor.startup(() => { + const app = createApp(App) + app.use(router) + app.use(VueMeteor) + app.mount('#app') +}) diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js new file mode 100644 index 0000000000..7768ef4894 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/router.js @@ -0,0 +1,18 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Home from './Home.vue' + +export const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'home', + component: Home, + }, + { + path: '/about', + name: 'about', + component: () => import('./About.vue'), + }, + ], +}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json new file mode 100644 index 0000000000..f8dc1cace8 --- /dev/null +++ b/tools/static-assets/skel-vue/package.json @@ -0,0 +1,33 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "build": "meteor build ../output/vue --directory", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.17.9", + "meteor-node-stubs": "^1.2.1", + "vue": "^3.2.45", + "vue-meteor-tracker": "^3.0.0-beta.7", + "vue-router": "^4.1.6" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + }, + "devDependencies": { + "@types/meteor": "^2.8.1", + "@vitejs/plugin-vue": "^3.2.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.19", + "tailwindcss": "^3.2.4", + "vite": "^3.2.3" + } +} diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js new file mode 100644 index 0000000000..33ad091d26 --- /dev/null +++ b/tools/static-assets/skel-vue/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js new file mode 100644 index 0000000000..44f7bc045b --- /dev/null +++ b/tools/static-assets/skel-vue/server/main.js @@ -0,0 +1,31 @@ +import { Meteor } from 'meteor/meteor' +import { LinksCollection } from '/imports/api/links' + +async function insertLink({ title, url }) { + await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) +} + +Meteor.startup(async () => { + // If the Links collection is empty, add some data. + if ((await LinksCollection.find().countAsync()) === 0) { + await insertLink({ + title: 'Do the Tutorial', + url: 'https://www.solidjs.com/tutorial/introduction_basics', + }) + + await insertLink({ + title: 'Follow the Guide', + url: 'https://guide.meteor.com', + }) + + await insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com', + }) + + await insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com', + }) + } +}) diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js new file mode 100644 index 0000000000..72c950fc84 --- /dev/null +++ b/tools/static-assets/skel-vue/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js new file mode 100644 index 0000000000..086819d896 --- /dev/null +++ b/tools/static-assets/skel-vue/tests/main.js @@ -0,0 +1,20 @@ +import assert from 'assert' + +describe('vue-skeleton', function () { + it('package.json has correct name', async function () { + const { name } = await import('../package.json') + assert.strictEqual(name, 'vue-skeleton') + }) + + if (Meteor.isClient) { + it('client is not server', function () { + assert.strictEqual(Meteor.isServer, false) + }) + } + + if (Meteor.isServer) { + it('server is not client', function () { + assert.strictEqual(Meteor.isClient, false) + }) + } +}) diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js new file mode 100644 index 0000000000..d3aeaa9aba --- /dev/null +++ b/tools/static-assets/skel-vue/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + meteor: { + clientEntry: 'imports/ui/main.js', + }, + optimizeDeps: { + exclude: ['vue-meteor-tracker'], + }, +}) From 399e7213af0f1b2062e3fbec2747df3c203375c8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:02:25 -0300 Subject: [PATCH 127/293] fix: addressed fred comments on publication.js scaffold --- tools/static-assets/scaffolds-js/publications.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js index c9f61c4533..bafaa5702c 100644 --- a/tools/static-assets/scaffolds-js/publications.js +++ b/tools/static-assets/scaffolds-js/publications.js @@ -1,9 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId() { - return $$PascalName$$Collection.find({ userId: this.userId }); -}); Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); From 2bf4f8093882185db1f6409b79ed37b607644901 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 14:02:35 -0300 Subject: [PATCH 128/293] ipdate commandline docs --- docs/source/commandline.md | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..cf67522956 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,7 +129,13 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) +Create a basic [Vue 3](https://vuejs.org/) app. + +`--react` + +`--vue-2` + +Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) for more information. `--svelte` @@ -146,35 +152,35 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [solid](https://www.solidjs.com/) app. +Create a basic [Solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:| +| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:|:---------:| | [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | | [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | | [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | | [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | | [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | @@ -183,6 +189,7 @@ Create a basic [solid](https://www.solidjs.com/) app. | [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X |

meteor login / logout

From 8b26690d8001e6133704f5a3e578e3c0717d826a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:02:46 -0300 Subject: [PATCH 129/293] fix: addressed fred comments on publication.ts scaffold --- tools/static-assets/scaffolds-ts/publications.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index 6b6e7b6b24..0b97d79d6f 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,9 +1,6 @@ import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this: Subscription) { - return $$PascalName$$Collection.find({ userId: this.userId }); -}); Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); From a914c079156eac4d67ec26086fc34535d6c4cb68 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:03:15 -0300 Subject: [PATCH 130/293] fix: adjusted publication-js scaffold spacing --- tools/static-assets/scaffolds-js/publications.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js index bafaa5702c..7e3a996634 100644 --- a/tools/static-assets/scaffolds-js/publications.js +++ b/tools/static-assets/scaffolds-js/publications.js @@ -1,7 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; - Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 6b9071fe6019518d53a26b8515c9047a319ea165 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:03:45 -0300 Subject: [PATCH 131/293] fix: adjusted spacing in publication.ts --- tools/static-assets/scaffolds-ts/publications.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index 0b97d79d6f..818932bba3 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,7 +1,6 @@ import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; - Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 54db6162e1883fd6ae1bd1d5a57cf717362db362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Tue, 15 Nov 2022 08:40:48 +0100 Subject: [PATCH 132/293] Deprecated Cursor#count. --- packages/minimongo/cursor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 72a51cd67b..0c119a8f81 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,7 +39,11 @@ export default class Cursor { } /** - * @summary Returns the number of documents that match a query. + * @deprecated in 2.9 + * @summary Returns the number of documents that match a query. This method is + * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); + * see `Collection.countDocuments` and + * `Collection.estimatedDocumentCount` for a replacement. * @memberOf Mongo.Cursor * @method count * @instance From 65488015fda736ebde2aa3a7c20eb18a49ab0dc5 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 15 Nov 2022 10:14:38 +0100 Subject: [PATCH 133/293] Update package.js onTest --- packages/package-version-parser/package.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 118b9c3f11..5150ec6023 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -14,7 +14,6 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use('package-version-parser'); - api.use(['tinytest']); + api.use(['package-version-parser', 'tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); From 5c552cc26ee0cd6321bc701b3d87e77ad70f82ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 17 Nov 2022 11:42:42 +0100 Subject: [PATCH 134/293] updated types from DefinitelyTyped --- packages/meteor/meteor.d.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index 0a482c0aa9..eb08d994bd 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,12 +147,19 @@ export namespace Meteor { }): void; /** - * Invokes a method passing any number of arguments. + * Invokes a method with a sync stub, passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; + /** + * Invokes a method with an async stub, passing any number of arguments. + * @param name Name of method to invoke + * @param args Optional method arguments + */ + function callAsync(name: string, ...args: any[]): Promise; + function apply< Result extends | EJSONable @@ -434,7 +441,14 @@ export namespace Meteor { */ function publish( name: string | null, - func: (this: Subscription, ...args: any[]) => void, + func: ( + this: Subscription, + ...args: any[] + ) => + | void + | Mongo.Cursor + | Mongo.Cursor[] + | Promise | Mongo.Cursor[]>, options?: { is_auto: boolean } ): void; From cbe7b1cf9e0237e3dd5d1b9640918f6f061834fa Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 17 Nov 2022 12:53:49 -0300 Subject: [PATCH 135/293] chore:updated npm package --- npm-packages/meteor-installer/README.md | 1 + npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index b240fe71b2..0fb3ca6f33 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,6 +14,7 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| +| 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | | 2.7.4 | 2.7.3 | diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 9b13c21c20..676cf07665 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.0'; +const METEOR_LATEST_VERSION = '2.8.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index d7a6b90863..34f8eb8224 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.0", + "version": "2.8.1", "description": "Install Meteor", "main": "install.js", "scripts": { From 6c06c2c3eb80a833e228c7c0e485ad8df8343635 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 17 Nov 2022 12:54:03 -0300 Subject: [PATCH 136/293] Revert "chore:updated npm package" This reverts commit cbe7b1cf9e0237e3dd5d1b9640918f6f061834fa. --- npm-packages/meteor-installer/README.md | 1 - npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index 0fb3ca6f33..b240fe71b2 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,7 +14,6 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| -| 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | | 2.7.4 | 2.7.3 | diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..9b13c21c20 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.8.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 34f8eb8224..d7a6b90863 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.1", + "version": "2.8.0", "description": "Install Meteor", "main": "install.js", "scripts": { From f4c3418594caa571b8d83b7a1a30bbd09a1b5fae Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Thu, 17 Nov 2022 18:41:21 -0300 Subject: [PATCH 137/293] No need to run tests without Fibers for now. --- .circleci/config.yml | 3 ++- .travis.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 91e4525564..8636ec1b63 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -116,7 +116,8 @@ set_fibers_env: &set_fibers_env matrix_for_fibers: &matrix_for_fibers matrix: parameters: - fibers: [true, false] + # If we want to run with Fibers and without, just append false here. + fibers: [true] jobs: diff --git a/.travis.yml b/.travis.yml index d3f1d88c1d..35e4e9f859 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,8 @@ env: - phantom=false - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium jobs: - - DISABLE_FIBERS=1 + # We don't want to run the tests without fibers anymore. + # - DISABLE_FIBERS=1 # Use a different flag, since node would use false as a string. - FIBERS_ENABLED=1 addons: From d944665433594404c8736a2d2faf87aabe80dbc0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:37:37 -0300 Subject: [PATCH 138/293] Meteor version to 2.9.0-beta.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 0c8277250b..c766053caa 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5', + version: '2.2.6-beta.0', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f346b8a1e4..303eaba06f 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.1", + version: "1.4.2-beta.0", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c4f9cadbd3..8369f947f5 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.1', + version: '2.3.2-beta.0', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 32515319fb..8dc67a4309 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.9.1-beta.0' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 326bad392a..b9fa55fd6c 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.2', + version: '2.2.3-beta.0', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 49b688e641..28a637989d 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1' + version: '1.11.2-beta.0' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index de8e9415cb..7cefb18217 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.0' + version: '1.4.1-beta.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 102f60b0ac..5c996e4d25 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.2", + version: "1.4.3-beta.0", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9691528e9f..b6b06917f2 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.1' + version: '1.1.2-beta.0' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index db38232d52..fb9a5e08cf 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.1' + version: '1.3.2-beta.0' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index b28bbf6643..e12de90ccd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1', + version: '2.9.0-beta.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 860c0cf168..7c520d5f9f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.2' + version: '1.10.3-beta.0' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 057a6f2104..4d7a7655d3 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.1' + version: '1.6.2-beta.0' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 3b8e47fb2f..8d21df2279 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.0' + version: '1.9.1-beta.0' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..d539e5dd78 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2-beta.0' }); Npm.depends({ diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 421be1d506..1a578a6672 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.2" + version: "2.1.3-beta.0" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index bb07c66774..ba53f1e367 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.0", + version: "1.5.1-beta.0", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index c5f2fd0917..54c6f79f91 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.1", + version: "1.3.2-beta.0", }); Package.onUse(api => { diff --git a/packages/promise/package.js b/packages/promise/package.js index 181ef21b3b..a63b92ce8c 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.1", + version: "0.12.2-beta.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 97e0d8f3eb..a8a25af974 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.2', + version: '1.8.3-beta.0', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..91fd073439 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.1-beta.0' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index a090172f76..5269ad01b7 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1', + version: '1.3.2-beta.0', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 862749494b..6bcaf11427 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.1' + version: '1.2.2-beta.0' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 6a8bd6793b..883c484b2e 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1' + version: '1.3.2-beta.0' }); Package.onUse(function(api) { diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9ce2620c89..da5746eaac 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.1", + version: "1.3.2-beta.0", }); Package.onUse(api => { From 681f6e3c814d598f30394ae7ccf16c939528d64c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:49:46 -0300 Subject: [PATCH 139/293] Meteor version to 2.9.0-beta.0 :comet: --- scripts/admin/meteor-release-experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e475269aa6..cbebb7dc99 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-rc.0", + "version": "2.9.0-beta.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 436f6fd4d4dd7ba764c9d4c779d6149679ebaa8d Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:52:33 +0300 Subject: [PATCH 140/293] apply ESLint rules --- npm-packages/eslint-config-meteor/index.js | 32 ++++++++-------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/npm-packages/eslint-config-meteor/index.js b/npm-packages/eslint-config-meteor/index.js index 5e71e32103..3c191d2ebc 100644 --- a/npm-packages/eslint-config-meteor/index.js +++ b/npm-packages/eslint-config-meteor/index.js @@ -1,21 +1,16 @@ module.exports = { parser: 'babel-eslint', parserOptions: { - allowImportExportEverywhere: true + allowImportExportEverywhere: true, }, env: { node: true, - browser: true + browser: true, }, - plugins: [ - 'meteor' - ], - extends: [ - 'airbnb', - 'plugin:meteor/recommended' - ], + plugins: ['meteor'], + extends: ['airbnb', 'plugin:meteor/recommended'], settings: { - 'import/resolver': 'meteor' + 'import/resolver': 'meteor', }, rules: { 'react/jsx-filename-extension': 0, @@ -30,24 +25,21 @@ module.exports = { 'no-underscore-dangle': [ 'error', { - allow: [ - '_id', - '_ensureIndex' - ] - } + allow: ['_id', '_ensureIndex'], + }, ], 'object-shorthand': [ 'error', 'always', { - avoidQuotes: false - } + avoidQuotes: false, + }, ], 'space-before-function-paren': 0, - + // for Meteor API's that rely on `this` context, e.g. Template.onCreated and publications 'func-names': 0, - 'prefer-arrow-callback': 0 - } + 'prefer-arrow-callback': 0, + }, }; From c25ae39cc7e63889b557cca8abcdf42119a74e3e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:54:57 -0300 Subject: [PATCH 141/293] Meteor version to 2.9.0-beta.1 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index c766053caa..b707f589a2 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-beta.0', + version: '2.2.6-beta.1', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 303eaba06f..cb23dbd2ad 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-beta.0", + version: "1.4.2-beta.1", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 8369f947f5..cccb4f7dd5 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-beta.0', + version: '2.3.2-beta.1', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 8dc67a4309..379d2c0c2b 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.1-beta.0' + version: '7.9.1-beta.1' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index b9fa55fd6c..c61c9c5b73 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-beta.0', + version: '2.2.3-beta.1', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 28a637989d..a5277d5090 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-beta.0' + version: '1.11.2-beta.1' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 7cefb18217..404779adbc 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-beta.0' + version: '1.4.1-beta.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 5c996e4d25..8b50f77029 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-beta.0", + version: "1.4.3-beta.1", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index b6b06917f2..f8af313b72 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-beta.0' + version: '1.1.2-beta.1' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index fb9a5e08cf..984b6bfb0b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-beta.0' + version: '1.3.2-beta.1' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index e12de90ccd..50aa8cd5f0 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-beta.0', + version: '2.9.0-beta.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7c520d5f9f..9513d32ec7 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-beta.0' + version: '1.10.3-beta.1' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 4d7a7655d3..f2b43c5d99 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-beta.0' + version: '1.6.2-beta.1' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 8d21df2279..b65eef1f20 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-beta.0' + version: '1.9.1-beta.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index d539e5dd78..ec1b8855f9 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-beta.0' + version: '1.16.2-beta.1' }); Npm.depends({ diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 1a578a6672..f048a7052f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-beta.0" + version: "2.1.3-beta.1" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index ba53f1e367..f103a140f8 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-beta.0", + version: "1.5.1-beta.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 54c6f79f91..4461057e41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-beta.0", + version: "1.3.2-beta.1", }); Package.onUse(api => { diff --git a/packages/promise/package.js b/packages/promise/package.js index a63b92ce8c..d5e9589a34 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-beta.0", + version: "0.12.2-beta.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index a8a25af974..02118cdbe7 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-beta.0', + version: '1.8.3-beta.1', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 91fd073439..63c1dfc334 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-beta.0' + version: '1.3.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 5269ad01b7..1a302849c0 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-beta.0', + version: '1.3.2-beta.1', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 6bcaf11427..9b978369a3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-beta.0' + version: '1.2.2-beta.1' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 883c484b2e..aff292bc4e 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-beta.0' + version: '1.3.2-beta.1' }); Package.onUse(function(api) { diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index da5746eaac..96466043f5 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-beta.0", + version: "1.3.2-beta.1", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index cbebb7dc99..240846fd90 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-beta.0", + "version": "2.9.0-beta.1", "recommended": false, "official": false, "description": "Meteor experimental release" From 7f1e920d7b578eb29ef2b050d132ac12deadb316 Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:56:36 +0300 Subject: [PATCH 142/293] update links --- npm-packages/eslint-config-meteor/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/eslint-config-meteor/package.json b/npm-packages/eslint-config-meteor/package.json index faff59b2ad..6b1d62defe 100644 --- a/npm-packages/eslint-config-meteor/package.json +++ b/npm-packages/eslint-config-meteor/package.json @@ -8,14 +8,14 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/meteor/eslint-config-meteor.git" + "url": "git+https://github.com/meteor/meteor.git" }, "author": "David Burles", "license": "MIT", "bugs": { - "url": "https://github.com/meteor/eslint-config-meteor/issues" + "url": "https://github.com/meteor/meteor/issues" }, - "homepage": "https://github.com/meteor/eslint-config-meteor#readme", + "homepage": "https://github.com/meteor/meteor/tree/devel/npm-packages/eslint-config-meteor#readme", "peerDependencies": { "babel-eslint": ">= 7", "eslint": ">= 3", From 2e8c5d06a5a798ae51f4ac93ad7d04d29387a64b Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:57:23 +0300 Subject: [PATCH 143/293] update readme --- npm-packages/eslint-config-meteor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-config-meteor/README.md b/npm-packages/eslint-config-meteor/README.md index 27c8ba5595..046c174268 100644 --- a/npm-packages/eslint-config-meteor/README.md +++ b/npm-packages/eslint-config-meteor/README.md @@ -1,4 +1,4 @@ -# eslint-config-meteor +# @meteorjs/eslint-config-meteor This is an [ESLint](https://eslint.org) configuration for [Meteor](https://www.meteor.com) apps which implements the recommendations from the [Meteor Guide](https://guide.meteor.com/)'s section on [Code style](https://guide.meteor.com/code-style.html#eslint). From 4abe0d6c01050ccf34b887eae42bee53de78d5b0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 12:03:12 -0300 Subject: [PATCH 144/293] chore: updated release logger to better understadn what is happening --- tools/cli/commands-packages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 2c8f3ff4e2..6a5c4d071c 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - + Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { From 119ed5e21973708bfd78910111e4852aaa599f6f Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Thu, 24 Nov 2022 18:45:08 +0100 Subject: [PATCH 145/293] Update npm-packages/meteor-babel/package.json Co-authored-by: Julian Waller --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 34870d8a86..e447f46515 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.6.4" + "typescript": "~4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", From 8ca7d26386d86cbf324c6213c3ef58e4806d8a1e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 25 Nov 2022 11:47:44 -0300 Subject: [PATCH 146/293] feat: @meteorjs/babel "7.17.0-beta.3 :tada: --- npm-packages/meteor-babel/package.json | 2 +- packages/babel-compiler/package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index e447f46515..c18e1387ff 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.0-beta.1", + "version": "7.17.0-beta.3", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index bdca4af252..437acf2a82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.17.0-beta.1', + '@meteorjs/babel': '7.17.0-beta.3', 'json5': '2.1.1' }); From 1fb621ecc7909447703568dd3635c73349661daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 25 Nov 2022 15:51:33 +0100 Subject: [PATCH 147/293] fixed reference error --- packages/test-in-browser/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..74eb11b465 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type != "finish"; }); var partitionBy = function(seq, func) { From 9eafb6cea6929f0698cac50e8e8ca64c0929be95 Mon Sep 17 00:00:00 2001 From: Zack Newsham Date: Tue, 29 Nov 2022 09:39:44 -0500 Subject: [PATCH 148/293] Make count NOT create a cursor --- packages/mongo/collection_tests.js | 34 ++++++++++++++++++++++++++++-- packages/mongo/mongo_driver.js | 15 +++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/packages/mongo/collection_tests.js b/packages/mongo/collection_tests.js index 78da9a1f18..fb92fb8b79 100644 --- a/packages/mongo/collection_tests.js +++ b/packages/mongo/collection_tests.js @@ -170,8 +170,8 @@ Tinytest.add('collection - calling find with a valid readPreference', ); // Trigger the creation of _synchronousCursor - defaultCursor.count(); - customCursor.count(); + defaultCursor.fetch(); + customCursor.fetch(); // defaultCursor._synchronousCursor._dbCursor.operation is not an option anymore // as the cursor options are now private @@ -384,3 +384,33 @@ Tinytest.add('collection - finding with a query with a binary field should retur } } ); + + +Tinytest.add('collection - count should release the session', + function(test) { + const client = MongoInternals.defaultRemoteCollectionDriver().mongo.client; + var collectionName = 'count' + test.id; + var collection = new Mongo.Collection(collectionName); + collection.insert({ _id: '1' }); + collection.insert({ _id: '2' }); + collection.insert({ _id: '3' }); + const preCount = client.s.activeSessions.size; + + test.equal(collection.find().count(), 3); + + // options and selector still work + test.equal(collection.find({ _id: { $ne: '1' } }, { skip: 1 }).count(), 1); + + // cursor reuse + const cursor1 = collection.find({ _id: { $ne: '1' } }, { skip: 1 }); + test.equal(cursor1.count(), 1); + test.equal(cursor1.fetch().length, 1); + + const cursor2 = collection.find({ _id: { $ne: '1' } }, { skip: 1 }); + test.equal(cursor2.fetch().length, 1); + test.equal(cursor2.count(), 1); + + const postCount = client.s.activeSessions.size; + test.equal(preCount, postCount); + } +); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 5d653636a8..2f7293c05d 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -907,12 +907,27 @@ function setupSynchronousCursor(cursor, method) { return cursor._synchronousCursor; } + [...ASYNC_CURSOR_METHODS, Symbol.iterator, Symbol.asyncIterator].forEach(methodName => { + // count is handled specially since we don't want to create a cursor. + // it is still included in ASYNC_CURSOR_METHODS because we still want an async version of it to exist. + if (methodName === 'count') { + return; + } Cursor.prototype[methodName] = function (...args) { const cursor = setupSynchronousCursor(this, methodName); return cursor[methodName](...args); }; + + Cursor.prototype.count = function () { + const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); + return Promise.await(collection.countDocuments( + replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), + replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), + )); + } + // These methods are handled separately. if (methodName === Symbol.iterator || methodName === Symbol.asyncIterator) { return; From 72ecbf600e630b6e3909ea118b255aadcb55a24d Mon Sep 17 00:00:00 2001 From: Zack Newsham Date: Tue, 29 Nov 2022 10:15:25 -0500 Subject: [PATCH 149/293] move count definition outside of loop and ensure async count method is still defined --- packages/mongo/mongo_driver.js | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 2f7293c05d..98a7017403 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -908,24 +908,22 @@ function setupSynchronousCursor(cursor, method) { } +Cursor.prototype.count = function () { + const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); + return Promise.await(collection.countDocuments( + replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), + replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), + )); +}; + [...ASYNC_CURSOR_METHODS, Symbol.iterator, Symbol.asyncIterator].forEach(methodName => { // count is handled specially since we don't want to create a cursor. // it is still included in ASYNC_CURSOR_METHODS because we still want an async version of it to exist. - if (methodName === 'count') { - return; - } - Cursor.prototype[methodName] = function (...args) { - const cursor = setupSynchronousCursor(this, methodName); - return cursor[methodName](...args); - }; - - - Cursor.prototype.count = function () { - const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); - return Promise.await(collection.countDocuments( - replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), - replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), - )); + if (methodName !== 'count') { + Cursor.prototype[methodName] = function (...args) { + const cursor = setupSynchronousCursor(this, methodName); + return cursor[methodName](...args); + }; } // These methods are handled separately. From aeb61cdbb0aeef14c0a3fd6a170f5077c14b0df5 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Tue, 29 Nov 2022 13:37:39 -0300 Subject: [PATCH 150/293] add runtime automatic to babel-preset-react --- npm-packages/meteor-babel/options.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 2d582a3102..21a9be7dde 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,7 +80,11 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push(require("@babel/preset-react")); + options.presets.push( + [require("@babel/preset-react"), { + runtime: "automatic" + }] + ); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true From 39c8c4bd9a20652436e9ae816170a24dfa57a546 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 13:43:35 -0300 Subject: [PATCH 151/293] =?UTF-8?q?Meteor=20version=20to=202.8.2=C2=A0:com?= =?UTF-8?q?et:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index b49fccf05e..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 61ada8bf5605cbd02d15213ed9775466ebca68f7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 14:08:06 -0300 Subject: [PATCH 152/293] =?UTF-8?q?Revert=20"Meteor=20version=20to=202.8.2?= =?UTF-8?q?=C2=A0:comet:"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 39c8c4bd9a20652436e9ae816170a24dfa57a546. --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 5eb3cebb85..31ef5d4b77 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2' + version: '1.16.1' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..b49fccf05e 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.8.1", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 31338d29f596b1a88d5b746281239223c84a2b08 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 14:09:28 -0300 Subject: [PATCH 153/293] =?UTF-8?q?Meteor=20version=20to=202.8.2=20?= =?UTF-8?q?=E2=98=84=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index b49fccf05e..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 0f5ec970edd5a736f593769ca75466123436c84e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:06:36 -0300 Subject: [PATCH 154/293] =?UTF-8?q?Meteor=20version=20to=202.8.2=20?= =?UTF-8?q?=E2=98=84=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/meteor-tool/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index b28bbf6643..eddeaa008c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1', + version: '2.8.2', }); Package.includeTool(); From be27502ba63a09e15cfd86614160672b9e1e5074 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:21 -0300 Subject: [PATCH 155/293] docs: feat updated docs --- docs/history.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/history.md b/docs/history.md index 724ece077c..84c04c6c0a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,29 @@ +## v2.8.2, 2022-11-29 + +#### Highlights +* `mongo@1.16.2`: + - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + +#### Breaking Changes +N/A + +#### Migration Steps + +#### Meteor Version Release +* `mongo@1.16.2`: + - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@znewsham](https://github.com/znewsham) + +For making this great framework even better! + + ## 2.8.1, 2022-11-14 #### Highlights From 83bebf9b2cd7af8256c902bfb56e66d5ab389bc5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:39 -0300 Subject: [PATCH 156/293] chore: updates meteor babel version --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index a896f5a3a1..c5c361f366 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.1", + "version": "7.16.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ From a835b0b7a842fe8da2dfda7058af83c64c712781 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:58 -0300 Subject: [PATCH 157/293] chore: update meteor babel in babel-compiler --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 40999ff266..be0b0b6110 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.1', + '@meteorjs/babel': '7.16.1-beta.0', 'json5': '2.1.1' }); From 5c15f4424d31569175d922c004cf7913fe18cd55 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:25:10 -0300 Subject: [PATCH 158/293] chore: update meteor babel in eslint plugin --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 6d107c5bf8..05ffa321b5 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.1-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 14719b402df08d9d8fb33b0a668f0c4178baf511 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:25:18 -0300 Subject: [PATCH 159/293] chore: update meteor babel in bundle tools --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index a2d440e238..ce78281faa 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 5cd1c04725ac23abce32338f9c82ebd8ea0c3859 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:27:02 -0300 Subject: [PATCH 160/293] chore: update meteor babel in dev-bundle tool --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 05ffa321b5..ddab44b16d 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.1", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 544ca59e1aeb386f853e18a35b3b559b87a9cb88 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:36:51 -0300 Subject: [PATCH 161/293] chore: updated meteor-babel to 7.17.1 --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index c18e1387ff..0dd8a7b838 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.0-beta.3", + "version": "7.17.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ From c6b6397e4c1b2287ce24386ee87ebfdee7ebee56 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:22 -0300 Subject: [PATCH 162/293] chore: updated deps from babel-compiler in meteor --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 437acf2a82..197b62c72d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.17.0-beta.3', + '@meteorjs/babel': '7.17.1-beta.0', 'json5': '2.1.1' }); From 65c67762d036d6be726375c28d9215eb35f8204c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:34 -0300 Subject: [PATCH 163/293] chore updated dev bundle dependecies --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index cce457c339..de71198d42 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.6.4", - "@meteorjs/babel": "7.17.0-beta.1", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From bfa04a7d67dd4715782636e45e07eeba4dfd88c5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:47 -0300 Subject: [PATCH 164/293] chore: updated tools dependencie --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index e0f21db047..301661ce9c 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.7", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From f919a6a7d702573e9504c807d0b6cd905d797997 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:39:04 -0300 Subject: [PATCH 165/293] chore: updated babel-compiler version --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 197b62c72d..607482696c 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.0-beta.1' + version: '7.10.1-beta.1' }); Npm.depends({ From 7c9c0092656de0b7b36c967ea6fe694470955414 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:36:29 -0300 Subject: [PATCH 166/293] chore: updated mongo driver --- packages/npm-mongo/package.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 63696bf272..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0', + version: '4.12.1', documentation: null }); Npm.depends({ - mongodb: "4.11.0" + mongodb: "4.12.1" }); Package.onUse(function (api) { From 794809cccc0538185e786b8a7bc761b7ff5bef2b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:38:38 -0300 Subject: [PATCH 167/293] chore: updating babel shrinkwrap --- .../.npm/package/npm-shrinkwrap.json | 746 +++++++++--------- 1 file changed, 358 insertions(+), 388 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4453e83e92..6b29dfbba0 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,206 +2,213 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + } + } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -219,9 +226,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -249,139 +256,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" }, "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" }, "@babel/runtime": { "version": "7.17.2", @@ -389,39 +396,49 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.16.0-beta.1", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", - "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -436,9 +453,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "acorn": { "version": "6.4.2", @@ -463,38 +480,33 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -506,14 +518,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -523,17 +535,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -548,62 +560,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -613,12 +625,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" }, "babel-preset-meteor": { "version": "7.10.0", @@ -626,24 +638,19 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", + "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" }, "browserslist": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", - "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" + "version": "1.0.30001435", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", + "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==" }, "chalk": { "version": "2.4.2", @@ -658,39 +665,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "escalade": { "version": "3.1.1", @@ -700,7 +695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "estree-walker": { "version": "2.0.2", @@ -722,11 +717,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -740,17 +730,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" }, "is-reference": { "version": "1.2.1", @@ -780,22 +765,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "ms": { "version": "2.1.2", @@ -803,19 +788,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "path-parse": { "version": "1.0.7", @@ -838,62 +813,52 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -912,12 +877,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -930,14 +895,19 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" } } } From eaa87a0ee5d5e5596de3fbf83b948e93a43552c1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:38:50 -0300 Subject: [PATCH 168/293] chore: updating npm-mongo shrinkwrap --- .../.npm/package/npm-shrinkwrap.json | 374 +++++++++--------- 1 file changed, 192 insertions(+), 182 deletions(-) diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 11662ebe99..b276e22ce7 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,214 +62,224 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", - "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", + "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", - "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", + "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" }, "@aws-sdk/client-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", - "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", + "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", + "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" }, "@aws-sdk/client-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", - "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", + "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" }, "@aws-sdk/config-resolver": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", - "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", + "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", - "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", + "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" }, "@aws-sdk/credential-provider-env": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", - "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", + "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", - "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", + "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", - "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", + "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" }, "@aws-sdk/credential-provider-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", - "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", + "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" }, "@aws-sdk/credential-provider-process": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", - "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", + "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", - "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", + "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", - "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", + "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" }, "@aws-sdk/credential-providers": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", - "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", + "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", - "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", + "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" }, "@aws-sdk/hash-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", - "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", + "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" }, "@aws-sdk/invalid-dependency": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", - "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", + "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" }, "@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" }, "@aws-sdk/middleware-content-length": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", - "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", + "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", + "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" }, "@aws-sdk/middleware-host-header": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", - "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", + "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" }, "@aws-sdk/middleware-logger": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", - "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", + "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", - "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", + "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" }, "@aws-sdk/middleware-retry": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", - "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", + "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", - "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", + "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" }, "@aws-sdk/middleware-serde": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", - "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", + "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" }, "@aws-sdk/middleware-signing": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", - "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", + "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" }, "@aws-sdk/middleware-stack": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", - "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", + "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", - "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", + "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" }, "@aws-sdk/node-config-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", - "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", + "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" }, "@aws-sdk/node-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", - "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", + "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" }, "@aws-sdk/property-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", - "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", + "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" }, "@aws-sdk/protocol-http": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", - "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", + "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" }, "@aws-sdk/querystring-builder": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", - "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", + "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" }, "@aws-sdk/querystring-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", - "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", + "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" }, "@aws-sdk/service-error-classification": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", - "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", + "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", - "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", + "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" }, "@aws-sdk/signature-v4": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", - "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", + "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" }, "@aws-sdk/smithy-client": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", - "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", + "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" + }, + "@aws-sdk/token-providers": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", + "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" }, "@aws-sdk/types": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", - "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" }, "@aws-sdk/url-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", - "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", + "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" }, - "@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" - }, - "@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -277,59 +287,64 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" }, "@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" }, "@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", - "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", + "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", - "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", + "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" + }, + "@aws-sdk/util-endpoints": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", + "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" }, "@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" }, "@aws-sdk/util-middleware": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", - "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", + "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" }, "@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", - "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", + "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", - "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", + "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -337,14 +352,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", - "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", + "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" }, "@types/node": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", - "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -376,11 +391,6 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -402,14 +412,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", + "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" }, "mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" }, "punycode": { "version": "2.1.1", @@ -447,9 +457,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "uuid": { "version": "8.3.2", From f3c6de4a719ec3648dee8b0031523e7cf97e7371 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:57:21 -0300 Subject: [PATCH 169/293] Meteor version to 2.9-rc.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index b707f589a2..8816e4ef4c 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-beta.1', + version: '2.2.6-rc.0', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index cb23dbd2ad..3539e662b6 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-beta.1", + version: "1.4.2-rc.0", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index cccb4f7dd5..beec9157bf 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-beta.1', + version: '2.3.2-rc.0', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 607482696c..304ca9858d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-beta.1' + version: '7.10.1-rc.0' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index c61c9c5b73..a99815d2e6 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-beta.1', + version: '2.2.3-rc.0', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index a5277d5090..af82e41dde 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-beta.1' + version: '1.11.2-rc.0' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 404779adbc..03edb1dcf7 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-beta.1' + version: '1.4.1-rc.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 8b50f77029..95d140cd6a 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-beta.1", + version: "1.4.3-rc.0", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f8af313b72..f79693e736 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-beta.1' + version: '1.1.2-rc.0' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 984b6bfb0b..341795461b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-beta.1' + version: '1.3.2-rc.0' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 50aa8cd5f0..be85c4b795 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-beta.1', + version: '2.9.0-rc.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 9513d32ec7..8ebc99ece4 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-beta.1' + version: '1.10.3-rc.0' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index f2b43c5d99..da297fa377 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-beta.1' + version: '1.6.2-rc.0' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index b65eef1f20..b6bc17b87d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-beta.1' + version: '1.9.1-rc.0' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ec1b8855f9..f4e8b398f5 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-beta.1' + version: '1.16.2-rc.0' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..3188582d2e 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.12.1-rc.0', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f048a7052f..8ab2dc6dde 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-beta.1" + version: "2.1.3-rc.0" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index f103a140f8..769c5e81d7 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-beta.1", + version: "1.5.1-rc.0", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4461057e41..ccfe9d30bd 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-beta.1", + version: "1.3.2-rc.0", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 5150ec6023..989ae04320 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.0" + version: "3.2.1-rc.0" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index d5e9589a34..bd294265ab 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-beta.1", + version: "0.12.2-rc.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 02118cdbe7..43e3f2ead3 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-beta.1', + version: '1.8.3-rc.0', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 63c1dfc334..92c3c33cea 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-beta.1' + version: '1.3.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 1a302849c0..f9d58e4b57 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-beta.1', + version: '1.3.2-rc.0', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 9b978369a3..28f46347c5 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-beta.1' + version: '1.2.2-rc.0' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index aff292bc4e..08b07fe4bd 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-beta.1' + version: '1.3.2-rc.0' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..c96306511e 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.6.4-rc.0', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 96466043f5..ac04263ebd 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-beta.1", + version: "1.3.2-rc.0", }); Package.onUse(api => { From 59cc6006f8f9cf1283c7f5eebd9175df3a0911fe Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 12:02:59 -0300 Subject: [PATCH 170/293] Meteor version to 2.9-rc.0 :comet: --- scripts/admin/meteor-release-experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 240846fd90..2ad53ae66c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-beta.1", + "version": "2.9.0-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" From b461058b339e2d0e7422cc5a4d44e878985d4799 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 12:18:36 -0300 Subject: [PATCH 171/293] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.1?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 8816e4ef4c..269724043d 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.0', + version: '2.2.6-rc.1', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 3539e662b6..b67d3499b2 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.0", + version: "1.4.2-rc.1", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index beec9157bf..4b2be2da36 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.0', + version: '2.3.2-rc.1', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 304ca9858d..fabfb21436 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.0' + version: '7.10.1-rc.1' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index a99815d2e6..6d6dabb8d6 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.0', + version: '2.2.3-rc.1', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index af82e41dde..21c806c9b4 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.0' + version: '1.11.2-rc.1' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 03edb1dcf7..8637c9778a 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.0' + version: '1.4.1-rc.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 95d140cd6a..80ac52abfe 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.0", + version: "1.4.3-rc.1", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f79693e736..8ac5e1fc74 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.0' + version: '1.1.2-rc.1' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 341795461b..67fd681235 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.0' + version: '1.3.2-rc.1' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index be85c4b795..c1745ccdcd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.0', + version: '2.9.0-rc.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8ebc99ece4..7c12582e2b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.0' + version: '1.10.3-rc.1' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index da297fa377..61aca97318 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.0' + version: '1.6.2-rc.1' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index b6bc17b87d..f6d3418c2f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.0' + version: '1.9.1-rc.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f4e8b398f5..a1b167081b 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.0' + version: '1.16.2-rc.1' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 3188582d2e..5d7723d7dc 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.0', + version: '4.12.1-rc.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8ab2dc6dde..4ac0dd16d2 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.0" + version: "2.1.3-rc.1" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 769c5e81d7..8e78ae26c2 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.0", + version: "1.5.1-rc.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index ccfe9d30bd..640269624f 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.0", + version: "1.3.2-rc.1", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 989ae04320..2af2cf6bb8 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.0" + version: "3.2.1-rc.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bd294265ab..b75d54bed2 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.0", + version: "0.12.2-rc.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 43e3f2ead3..b38e2ba01b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.0', + version: '1.8.3-rc.1', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 92c3c33cea..b594f6df81 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.0' + version: '1.3.1-rc.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index f9d58e4b57..4ba792e755 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.0', + version: '1.3.2-rc.1', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 28f46347c5..b2a9bc96cf 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.0' + version: '1.2.2-rc.1' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 08b07fe4bd..16b5b90533 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.0' + version: '1.3.2-rc.1' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index c96306511e..40ced291f1 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.0', + version: '4.6.4-rc.1', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index ac04263ebd..9dcac977c0 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.0", + version: "1.3.2-rc.1", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 2ad53ae66c..ef786cef8b 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.0", + "version": "2.9.0-rc.1", "recommended": false, "official": false, "description": "Meteor experimental release" From c615a3118081a4b5061a8e0db7a1c5f3d9ea094f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 14:19:48 -0300 Subject: [PATCH 172/293] docs: added notes on babel --- docs/history.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/history.md b/docs/history.md index 84c04c6c0a..d8e5806060 100644 --- a/docs/history.md +++ b/docs/history.md @@ -4,7 +4,8 @@ * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327). + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Breaking Changes N/A @@ -15,7 +16,8 @@ N/A * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) From ceb6cd510a4c3c702ec709729922d44876541958 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 16:42:09 -0300 Subject: [PATCH 173/293] docs: adjusted what changed --- docs/history.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 74ec5cd7d0..5eeef4bf69 100644 --- a/docs/history.md +++ b/docs/history.md @@ -2,14 +2,94 @@ ### Highlights * TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) - +* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) +* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) +* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) +* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) +* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) +* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) +* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) +* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) +* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) +* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) +* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) #### Breaking Changes + * Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + #### Migration Steps #### Meteor Version Release +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 + +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `meteorjs/babel@7.17.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 +* `accounts-base@2.2.6` + - Moved some functions to accounts-oauth. +* `accounts-oauth@1.4.2` + - Received functions from accounts-base. +* `accounts-password@2.3.2` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` +* `babel-compiler@7.10.1` + - Updated babel to 7.17.1. +* `email@2.2.3` + - Create Email.sendAsync method without using Fibers. +* `facebook-oauth@1.11.2` + - Updated facebook-oauth to use async functions. +* `github-oauth@1.4.1` + - Updated github-oauth to use async functions. +* `google-oauth@1.4.3` + - Updated google-oauth to use async functions. +* `meetup-oauth@1.1.2` + - Updated meetup-oauth to use async functions. +* `meteor-developer-oauth@1.3.2` + - Updated meteor-developer-oauth to use async functions. +* `meteor@1.10.3` + - Added Async Local Storage helpers. +* `minifier-css@1.6.2` + - Asyncfied `minifyCss` function. +* `minimongo@1.9.1` + - Implemented Fibers-less MongoDB count methods. +* `mongo@1.16.2` + - Implemented Fibers-less MongoDB count methods. +* `npm-mongo@4.12.1` + - Updated npm-mongo to 4.12. +* `oauth@2.1.3` + - Asyncfied methods. +* `oauth1@1.5.1` + - Asyncfied methods. +* `oauth2@1.3.2` + - Asyncfied methods. +* `package-version-parser@3.2.1` + - Removed underscore. +* `promise@0.12.2` + - Added DISABLE_FIBERS flag. +* `standard-minifier-css@1.8.3` + - Asyncfied minify method. +* `test-helpers@1.3.1` + - added runAndThrowIfNeeded function. +* `test-in-browser@1.3.2` + - Adjusted e[type] to e.type +* `tinytest@1.2.2` + - TinyTest package without Future +* `twitter-oauth@1.3.2` + - Asyncfied methods. +* `typescript@4.6.4` + - updated typescript to 4.6.4. +* `weibo-oauth@1.3.2` + - Asyncfied methods. + ## v2.8.2, 2022-11-29 From f0c9e9e41b16d7d2ab534cac0bf2921ae5903c44 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 16:53:22 -0300 Subject: [PATCH 174/293] docs: removed unessary comment --- docs/history.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/history.md b/docs/history.md index 5eeef4bf69..f5175dcc46 100644 --- a/docs/history.md +++ b/docs/history.md @@ -26,9 +26,6 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel From 66f50c13b5c2dffb1b8accf8f79b01f17456b13c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:03:13 -0300 Subject: [PATCH 175/293] chore: new dev bundle --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 0779da7ba2..9e615ab4c0 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.0 +BUNDLE_VERSION=14.21.1.1 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 42310a16b40cb7285cbec6cc0c878bdc6ed35ae5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:15:39 -0300 Subject: [PATCH 176/293] docs: reverted comment --- docs/history.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index f5175dcc46..200fbb8bca 100644 --- a/docs/history.md +++ b/docs/history.md @@ -26,7 +26,8 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel - +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel * `meteorjs/babel@7.17.1-beta.0` From 3a05f715e34e3060ed7c158f91b761cd1c597ce2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:33:29 -0300 Subject: [PATCH 177/293] Meteor version to 2.9.0-rc.2 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 269724043d..a745ff2a09 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.1', + version: '2.2.6-rc.2', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b67d3499b2..4504397b80 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.1", + version: "1.4.2-rc.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 4b2be2da36..9d16e39572 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.1', + version: '2.3.2-rc.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index fabfb21436..84a3db04a2 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.1' + version: '7.10.1-rc.2' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 6d6dabb8d6..4be7bdf3e7 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.1', + version: '2.2.3-rc.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 21c806c9b4..82464d6f6f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.1' + version: '1.11.2-rc.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 8637c9778a..d208682bf0 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.1' + version: '1.4.1-rc.2' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 80ac52abfe..98b92e06c9 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.1", + version: "1.4.3-rc.2", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 8ac5e1fc74..3a9c51498e 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.1' + version: '1.1.2-rc.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 67fd681235..1d0162691d 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.1' + version: '1.3.2-rc.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index c1745ccdcd..93c42c19fd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.1', + version: '2.9.0-rc.2', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7c12582e2b..3e8add292a 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.1' + version: '1.10.3-rc.2' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 61aca97318..e105967812 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.1' + version: '1.6.2-rc.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index f6d3418c2f..f5491a17c2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.1' + version: '1.9.1-rc.2' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index a1b167081b..22ffbe3c3d 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.1' + version: '1.16.2-rc.2' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 5d7723d7dc..37f76a34dd 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.1', + version: '4.12.1-rc.2', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4ac0dd16d2..303d259386 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.1" + version: "2.1.3-rc.2" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 8e78ae26c2..38fd7c0ba6 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.1", + version: "1.5.1-rc.2", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 640269624f..f3ed307b75 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.1", + version: "1.3.2-rc.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 2af2cf6bb8..5468b6e4a5 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.1" + version: "3.2.1-rc.2" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index b75d54bed2..fe33229282 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.1", + version: "0.12.2-rc.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index b38e2ba01b..3b2ada0b5b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.1', + version: '1.8.3-rc.2', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index b594f6df81..11a90d313b 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.1' + version: '1.3.1-rc.2' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 4ba792e755..289b44c26a 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.1', + version: '1.3.2-rc.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index b2a9bc96cf..6956b58550 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.1' + version: '1.2.2-rc.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 16b5b90533..188d868745 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.1' + version: '1.3.2-rc.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 40ced291f1..323564066b 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.1', + version: '4.6.4-rc.2', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9dcac977c0..cf7b358d01 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.1", + version: "1.3.2-rc.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index ef786cef8b..7ae088249f 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.1", + "version": "2.9.0-rc.2", "recommended": false, "official": false, "description": "Meteor experimental release" From b2d20f33b9b1b6ada24ee9b02c7e39573ae34065 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 10:57:55 -0300 Subject: [PATCH 178/293] chore: updated package lock --- npm-packages/meteor-babel/package-lock.json | 3880 ++++++++++++++++++- 1 file changed, 3874 insertions(+), 6 deletions(-) diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 8e5d6a7e5d..b3d0d406f2 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,8 +1,3875 @@ { "name": "@meteorjs/babel", - "version": "7.16.0-beta.7", - "lockfileVersion": 1, + "version": "7.17.1-beta.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@meteorjs/babel", + "version": "7.17.1-beta.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-react": "^7.16.7", + "@babel/runtime": "7.17.2", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "@meteorjs/reify": "0.23.0", + "babel-preset-meteor": "^7.10.0", + "babel-preset-minify": "^0.5.1", + "convert-source-map": "^1.6.0", + "lodash": "^4.17.21", + "meteor-babel-helpers": "0.0.3", + "typescript": "~4.6.4" + }, + "devDependencies": { + "@babel/plugin-proposal-decorators": "7.14.5", + "@babel/plugin-syntax-decorators": "7.14.5", + "d3": "4.13.0", + "fibers": "5.0.0", + "meteor-promise": "0.9.0", + "mocha": "6.2.3", + "promise": "8.1.0", + "source-map": "0.6.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", + "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", + "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/@babel/core/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", + "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@meteorjs/reify": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", + "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", + "dependencies": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "magic-string": "^0.25.3", + "periscopic": "^2.0.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@meteorjs/reify/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "node_modules/babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + }, + "node_modules/babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + }, + "node_modules/babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + }, + "node_modules/babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + }, + "node_modules/babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + }, + "node_modules/babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" + }, + "node_modules/babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-dead-code-elimination": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "node_modules/babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + }, + "node_modules/babel-plugin-minify-mangle-names": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", + "dependencies": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + }, + "node_modules/babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" + }, + "node_modules/babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + }, + "node_modules/babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + }, + "node_modules/babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + }, + "node_modules/babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + }, + "node_modules/babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "dependencies": { + "esutils": "^2.0.2" + } + }, + "node_modules/babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + }, + "node_modules/babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + }, + "node_modules/babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + }, + "node_modules/babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + }, + "node_modules/babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + }, + "node_modules/babel-preset-meteor": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", + "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", + "dependencies": { + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13" + } + }, + "node_modules/babel-preset-minify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", + "dependencies": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001248", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", + "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/core-js-compat/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "dev": true, + "dependencies": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + } + }, + "node_modules/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "node_modules/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "node_modules/d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "node_modules/d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "node_modules/d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "node_modules/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "dev": true, + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "node_modules/d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", + "dev": true + }, + "node_modules/d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "node_modules/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "node_modules/d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "node_modules/d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "node_modules/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "node_modules/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "node_modules/d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "node_modules/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", + "dev": true + }, + "node_modules/d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "dev": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "node_modules/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "node_modules/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.793", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", + "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/meteor-babel-helpers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + }, + "node_modules/meteor-promise": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -1073,7 +4940,8 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "requires": {} }, "ansi-colors": { "version": "3.2.3", @@ -2722,9 +6590,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unbox-primitive": { "version": "1.0.1", From e152d385fff9e3e912cd5ab3354a0fa6d5db3eef Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:16:11 -0300 Subject: [PATCH 179/293] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.3?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index a745ff2a09..db751f370c 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.2', + version: '2.2.6-rc.3', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 4504397b80..93f7c89bae 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.2", + version: "1.4.2-rc.3", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 9d16e39572..b67228177d 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.2', + version: '2.3.2-rc.3', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 84a3db04a2..d87cf61dad 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.2' + version: '7.10.1-rc.3' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 4be7bdf3e7..7a33dd7500 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.2', + version: '2.2.3-rc.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 82464d6f6f..b998d4d748 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.2' + version: '1.11.2-rc.3' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index d208682bf0..b9b14358fd 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.2' + version: '1.4.1-rc.3' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 98b92e06c9..80b825eca3 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.2", + version: "1.4.3-rc.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 3a9c51498e..0aecf043d0 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.2' + version: '1.1.2-rc.3' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 1d0162691d..3ab475b9db 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.2' + version: '1.3.2-rc.3' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 93c42c19fd..e55a225bce 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.2', + version: '2.9.0-rc.3', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 3e8add292a..cec6a5024f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.2' + version: '1.10.3-rc.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index e105967812..471affdd36 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.2' + version: '1.6.2-rc.3' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index f5491a17c2..9ccf14201d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.2' + version: '1.9.1-rc.3' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 22ffbe3c3d..b4f5175887 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.2' + version: '1.16.2-rc.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 37f76a34dd..d94df22844 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.2', + version: '4.12.1-rc.3', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 303d259386..468a124a4a 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.2" + version: "2.1.3-rc.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 38fd7c0ba6..b08c02a44d 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.2", + version: "1.5.1-rc.3", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index f3ed307b75..e84518b7d5 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.2", + version: "1.3.2-rc.3", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 5468b6e4a5..b9126c14f7 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.2" + version: "3.2.1-rc.3" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index fe33229282..2a1cf5fd07 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.2", + version: "0.12.2-rc.3", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 3b2ada0b5b..e7f9a2a15d 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.2', + version: '1.8.3-rc.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 11a90d313b..8d43c9d7fd 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.2' + version: '1.3.1-rc.3' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 289b44c26a..02b49bc817 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.2', + version: '1.3.2-rc.3', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 6956b58550..667cf41732 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.2' + version: '1.2.2-rc.3' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 188d868745..f340073e9a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.2' + version: '1.3.2-rc.3' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 323564066b..9d933c5aaa 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.2', + version: '4.6.4-rc.3', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index cf7b358d01..6fa4d73f99 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.2", + version: "1.3.2-rc.3", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 7ae088249f..ea5f0127e6 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.2", + "version": "2.9.0-rc.3", "recommended": false, "official": false, "description": "Meteor experimental release" From 4053f55616f0b46d1483669609197d3ab731c85f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:32:57 -0300 Subject: [PATCH 180/293] Meteor version to 2.9.0-rc.4 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index db751f370c..46da70e8f9 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.3', + version: '2.2.6-rc.4', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 93f7c89bae..e60d26a1a3 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.3", + version: "1.4.2-rc.4", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index b67228177d..23a0c65fd6 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.3', + version: '2.3.2-rc.4', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index d87cf61dad..859782395e 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.3' + version: '7.10.1-rc.4' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 7a33dd7500..bc92a5e1cf 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.3', + version: '2.2.3-rc.4', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index b998d4d748..55235872d7 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.3' + version: '1.11.2-rc.4' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index b9b14358fd..2cf6dc3f87 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.3' + version: '1.4.1-rc.4' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 80b825eca3..6d6b9e3e6f 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.3", + version: "1.4.3-rc.4", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 0aecf043d0..379e802c1a 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.3' + version: '1.1.2-rc.4' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 3ab475b9db..bbdac3edd6 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.3' + version: '1.3.2-rc.4' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index e55a225bce..da33fb6d26 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.3', + version: '2.9.0-rc.4', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index cec6a5024f..be4212d4da 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.3' + version: '1.10.3-rc.4' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 471affdd36..d64fb9b335 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.3' + version: '1.6.2-rc.4' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9ccf14201d..960d0ec951 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.3' + version: '1.9.1-rc.4' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index b4f5175887..a0539d0ed7 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.3' + version: '1.16.2-rc.4' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index d94df22844..ab0ed14753 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.3', + version: '4.12.1-rc.4', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 468a124a4a..2cf15788c7 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.3" + version: "2.1.3-rc.4" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index b08c02a44d..fc8c7aa1ad 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.3", + version: "1.5.1-rc.4", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index e84518b7d5..a2a8dcbf8e 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.3", + version: "1.3.2-rc.4", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index b9126c14f7..8846076fa6 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.3" + version: "3.2.1-rc.4" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 2a1cf5fd07..8f58c63280 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.3", + version: "0.12.2-rc.4", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index e7f9a2a15d..b63a2fa48b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.3', + version: '1.8.3-rc.4', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 8d43c9d7fd..4ac9ab852f 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.3' + version: '1.3.1-rc.4' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 02b49bc817..b379e4ddf8 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.3', + version: '1.3.2-rc.4', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 667cf41732..1f1c144a48 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.3' + version: '1.2.2-rc.4' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index f340073e9a..add0d7ff72 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.3' + version: '1.3.2-rc.4' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 9d933c5aaa..0a4c79ebdf 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.3', + version: '4.6.4-rc.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 6fa4d73f99..b10da0d720 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.3", + version: "1.3.2-rc.4", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index ea5f0127e6..e419ea413c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.3", + "version": "2.9.0-rc.4", "recommended": false, "official": false, "description": "Meteor experimental release" From 060d181870417831d42ba22c161b2941141b89c5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:46:57 -0300 Subject: [PATCH 181/293] Meteor version to 2.9.0-rc.5 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 46da70e8f9..afd49c426f 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.4', + version: '2.2.6-rc.5', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index e60d26a1a3..467e7d5707 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.4", + version: "1.4.2-rc.5", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 23a0c65fd6..1adafeab07 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.4', + version: '2.3.2-rc.5', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 859782395e..39066adca4 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.4' + version: '7.10.1-rc.5' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index bc92a5e1cf..3c3342e02d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.4', + version: '2.2.3-rc.5', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 55235872d7..9346ebc94e 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.4' + version: '1.11.2-rc.5' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2cf6dc3f87..b3b8dd634a 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.4' + version: '1.4.1-rc.5' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 6d6b9e3e6f..a730a9cc22 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.4", + version: "1.4.3-rc.5", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 379e802c1a..340b1ac80f 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.4' + version: '1.1.2-rc.5' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index bbdac3edd6..37602091d7 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.4' + version: '1.3.2-rc.5' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index da33fb6d26..99121891fe 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.4', + version: '2.9.0-rc.5', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index be4212d4da..b8d4b9e806 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.4' + version: '1.10.3-rc.5' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index d64fb9b335..1706c51fd6 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.4' + version: '1.6.2-rc.5' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 960d0ec951..9ce8ac7c0c 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.4' + version: '1.9.1-rc.5' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index a0539d0ed7..ebd5a494b0 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.4' + version: '1.16.2-rc.5' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index ab0ed14753..b9e33d1685 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.4', + version: '4.12.1-rc.5', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 2cf15788c7..81ef4c021b 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.4" + version: "2.1.3-rc.5" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index fc8c7aa1ad..50d6bf5bed 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.4", + version: "1.5.1-rc.5", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index a2a8dcbf8e..9ddb66a4d7 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.4", + version: "1.3.2-rc.5", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 8846076fa6..8baa509e4c 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.4" + version: "3.2.1-rc.5" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 8f58c63280..035c42cbce 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.4", + version: "0.12.2-rc.5", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index b63a2fa48b..68d390ac82 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.4', + version: '1.8.3-rc.5', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 4ac9ab852f..de372d620f 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.4' + version: '1.3.1-rc.5' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index b379e4ddf8..20bc22d4c4 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.4', + version: '1.3.2-rc.5', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 1f1c144a48..7e582bd11c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.4' + version: '1.2.2-rc.5' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index add0d7ff72..621466f534 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.4' + version: '1.3.2-rc.5' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 0a4c79ebdf..03b0750e1e 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.4', + version: '4.6.4-rc.5', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index b10da0d720..7df587a1b1 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.4", + version: "1.3.2-rc.5", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e419ea413c..a155cacdd1 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.4", + "version": "2.9.0-rc.5", "recommended": false, "official": false, "description": "Meteor experimental release" From dba13e5c1a7b4dfe74b190928bbc9ea36fdc5b58 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:18:04 -0300 Subject: [PATCH 182/293] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.6?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index afd49c426f..2516a1d427 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.5', + version: '2.2.6-rc290.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 467e7d5707..bcf9090c87 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.5", + version: "1.4.2-rc290.6", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 1adafeab07..0d67e5d397 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.5', + version: '2.3.2-rc290.6', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 39066adca4..7bfeb7f297 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.5' + version: '7.10.1-rc290.6' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 3c3342e02d..a231dfeae7 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.5', + version: '2.2.3-rc290.6', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 9346ebc94e..cb34e18e87 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.5' + version: '1.11.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index b3b8dd634a..175e0a4e76 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.5' + version: '1.4.1-rc290.6' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index a730a9cc22..1638d25d02 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.5", + version: "1.4.3-rc290.6", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 340b1ac80f..1eaa1661bd 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.5' + version: '1.1.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 37602091d7..e22ec70c1b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.5' + version: '1.3.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 99121891fe..959a1ac36f 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.5', + version: '2.9.0-rc.6', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index b8d4b9e806..e3385827f3 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.5' + version: '1.10.3-rc290.6' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 1706c51fd6..ee14df2e61 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.5' + version: '1.6.2-rc290.6' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9ce8ac7c0c..4cf6e30562 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.5' + version: '1.9.1-rc290.6' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ebd5a494b0..8b31a877ba 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.5' + version: '1.16.2-rc290.6' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index b9e33d1685..5d591f1b1d 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.5', + version: '4.12.1-rc290.6', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 81ef4c021b..6ef459e69f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.5" + version: "2.1.3-rc290.6" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 50d6bf5bed..f364637d73 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.5", + version: "1.5.1-rc290.6", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 9ddb66a4d7..74d60a7a4f 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.5", + version: "1.3.2-rc290.6", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 8baa509e4c..fb2e2c00ee 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.5" + version: "3.2.1-rc290.6" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 035c42cbce..bee5601c95 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.5", + version: "0.12.2-rc290.6", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 68d390ac82..ee72dc0902 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.5', + version: '1.8.3-rc290.6', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index de372d620f..08d05bd11a 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.5' + version: '1.3.1-rc290.6' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 20bc22d4c4..b1659071fd 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.5', + version: '1.3.2-rc290.6', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 7e582bd11c..483d37289a 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.5' + version: '1.2.2-rc290.6' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 621466f534..e2ac973c5b 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.5' + version: '1.3.2-rc290.6' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 03b0750e1e..5f5ca367db 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.5', + version: '4.6.4-rc290.6', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 7df587a1b1..609cbd752c 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.5", + version: "1.3.2-rc290.6", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index a155cacdd1..4223d3dc80 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.5", + "version": "2.9.0-rc.6", "recommended": false, "official": false, "description": "Meteor experimental release" From 1fb05e690a6d89ff4462bf5500628fa3b8fcf9f3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:30:51 -0300 Subject: [PATCH 183/293] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.7?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 2516a1d427..dcdc58c2ee 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.6', + version: '2.2.6-rc290.7', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index bcf9090c87..04bbfceae2 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.6", + version: "1.4.2-rc290.7", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 0d67e5d397..a5d24bbe3c 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.6', + version: '2.3.2-rc290.7', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 7bfeb7f297..717e778c48 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.6' + version: '7.10.1-rc290.7' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index a231dfeae7..2c8b006712 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.6', + version: '2.2.3-rc290.7', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index cb34e18e87..6ac254e556 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.6' + version: '1.11.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 175e0a4e76..50f370f7da 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.6' + version: '1.4.1-rc290.7' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 1638d25d02..cffda28899 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.6", + version: "1.4.3-rc290.7", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 1eaa1661bd..1578dbfaaa 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.6' + version: '1.1.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index e22ec70c1b..859fdd1846 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.6' + version: '1.3.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 959a1ac36f..12c31fe115 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.6', + version: '2.9.0-rc.7', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index e3385827f3..444d4c49b7 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.6' + version: '1.10.3-rc290.7' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index ee14df2e61..c63b886fe2 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.6' + version: '1.6.2-rc290.7' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 4cf6e30562..c0f42a0d12 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.6' + version: '1.9.1-rc290.7' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 8b31a877ba..662de1284e 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.6' + version: '1.16.2-rc290.7' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 5d591f1b1d..2a52644f14 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.6', + version: '4.12.1-rc290.7', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 6ef459e69f..7723135d7f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.6" + version: "2.1.3-rc290.7" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index f364637d73..242421fd7f 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.6", + version: "1.5.1-rc290.7", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 74d60a7a4f..9729b96902 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.6", + version: "1.3.2-rc290.7", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index fb2e2c00ee..fcd069c272 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.6" + version: "3.2.1-rc290.7" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bee5601c95..e700a53b4e 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.6", + version: "0.12.2-rc290.7", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index ee72dc0902..0a54e6fc3c 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.6', + version: '1.8.3-rc290.7', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 08d05bd11a..ea199e48f4 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.6' + version: '1.3.1-rc290.7' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index b1659071fd..41ce488257 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.6', + version: '1.3.2-rc290.7', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 483d37289a..73022d23d9 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.6' + version: '1.2.2-rc290.7' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index e2ac973c5b..5b0702df96 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.6' + version: '1.3.2-rc290.7' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 5f5ca367db..1813238194 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.6', + version: '4.6.4-rc290.7', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 609cbd752c..4136341306 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.6", + version: "1.3.2-rc290.7", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 4223d3dc80..5bae73e5b9 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.6", + "version": "2.9.0-rc.7", "recommended": false, "official": false, "description": "Meteor experimental release" From 28361eee67c2dfe19d11987dec0db4beab762367 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Fri, 2 Dec 2022 21:48:47 +0700 Subject: [PATCH 184/293] update 2.8-migration.md, fix typo --- guide/source/2.8-migration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/source/2.8-migration.md b/guide/source/2.8-migration.md index 1e1ccb4a8b..8d89edf12f 100644 --- a/guide/source/2.8-migration.md +++ b/guide/source/2.8-migration.md @@ -157,7 +157,7 @@ As `callAsync` returns a promise, it'll be solved in the future. So you need to It's also important to understand what will happen if you call an async method with `Meteor.call`, and vice versa. -If you can an async method with `Meteor.call` in the client, and you don't have the package `insecure` on your project, an error like this will be thrown: +If you call an async method with `Meteor.call` in the client, and you don't have the package `insecure` on your project, an error like this will be thrown: From e35c182d4c5f2e2e4d7b0435bc5bca928cbc45b7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:54:16 -0300 Subject: [PATCH 185/293] Meteor version to 2.9.0-rc.7 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- tools/packaging/package-client.js | 3 ++- 30 files changed, 31 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index dcdc58c2ee..07a2809ded 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.7', + version: '2.2.6-rc290.8', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 04bbfceae2..5475ad7a28 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.7", + version: "1.4.2-rc290.8", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index a5d24bbe3c..9294ae2449 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.7', + version: '2.3.2-rc290.8', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 717e778c48..2b0736b1e5 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.7' + version: '7.10.1-rc290.8' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 2c8b006712..5402ccba27 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.7', + version: '2.2.3-rc290.8', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 6ac254e556..8a03bcd57f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.7' + version: '1.11.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 50f370f7da..8d90874afb 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.7' + version: '1.4.1-rc290.8' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index cffda28899..7aa89700c0 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.7", + version: "1.4.3-rc290.8", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 1578dbfaaa..564bfea927 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.7' + version: '1.1.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 859fdd1846..d9f681d428 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.7' + version: '1.3.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 12c31fe115..4a1d440a7e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.7', + version: '2.9.0-rc.8', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 444d4c49b7..58692bce87 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.7' + version: '1.10.3-rc290.8' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index c63b886fe2..4140534a7b 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.7' + version: '1.6.2-rc290.8' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index c0f42a0d12..bd9f421c5f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.7' + version: '1.9.1-rc290.8' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 662de1284e..f6427562ee 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.7' + version: '1.16.2-rc290.8' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 2a52644f14..7237cba836 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.7', + version: '4.12.1-rc290.8', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 7723135d7f..9bce2dbc03 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.7" + version: "2.1.3-rc290.8" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 242421fd7f..cec51732f4 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.7", + version: "1.5.1-rc290.8", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 9729b96902..2c97c91826 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.7", + version: "1.3.2-rc290.8", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index fcd069c272..4f0b33d677 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.7" + version: "3.2.1-rc290.8" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index e700a53b4e..f75624bb27 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.7", + version: "0.12.2-rc290.8", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 0a54e6fc3c..3b2717ad26 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.7', + version: '1.8.3-rc290.8', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index ea199e48f4..60a1d789a6 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.7' + version: '1.3.1-rc290.8' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 41ce488257..0d9db0ec90 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.7', + version: '1.3.2-rc290.8', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 73022d23d9..89b1031fc2 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.7' + version: '1.2.2-rc290.8' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 5b0702df96..faf2ae233d 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.7' + version: '1.3.2-rc290.8' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 1813238194..28c33cf702 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.7', + version: '4.6.4-rc290.8', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 4136341306..2340c02251 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.7", + version: "1.3.2-rc290.8", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 5bae73e5b9..e916ee9c2a 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.7", + "version": "2.9.0-rc.8", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 78af222cfd..1649ab6212 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,7 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - + console.log(JSON.stringify(uploadInfo)) // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { @@ -820,6 +820,7 @@ exports.publishPackage = function (options) { } buildmessage.enterJob("uploading source", function () { + console.log(JSON.stringify(uploadInfo)) uploadFile(uploadInfo.uploadUrl, sourceBundleResult.sourceTarball); }); if (buildmessage.jobHasMessages()) { From 539ef5ddf6ba2fbada85473eeb7ed14d1013c153 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 12:06:52 -0300 Subject: [PATCH 186/293] chore: removed logs --- tools/packaging/package-client.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 1649ab6212..3075970647 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,6 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - console.log(JSON.stringify(uploadInfo)) // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { @@ -820,7 +819,6 @@ exports.publishPackage = function (options) { } buildmessage.enterJob("uploading source", function () { - console.log(JSON.stringify(uploadInfo)) uploadFile(uploadInfo.uploadUrl, sourceBundleResult.sourceTarball); }); if (buildmessage.jobHasMessages()) { From bbe159edae20ed4593e3a897cc9767abb0367547 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 14:41:01 -0300 Subject: [PATCH 187/293] Meteor version to 2.9.0-rc.9 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 07a2809ded..7213f5f9bc 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.8', + version: '2.2.6-rc290.9', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 5475ad7a28..b4ff252406 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.8", + version: "1.4.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 9294ae2449..c706bf0c25 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.8', + version: '2.3.2-rc290.9', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 2b0736b1e5..cd6e31c746 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.8' + version: '7.10.1-rc290.9' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 5402ccba27..35b97f5ade 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.8', + version: '2.2.3-rc290.9', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 8a03bcd57f..85e29c433a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.8' + version: '1.11.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 8d90874afb..e2df30d6f8 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.8' + version: '1.4.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 7aa89700c0..4719cc5fe7 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.8", + version: "1.4.3-rc290.9", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 564bfea927..f7f81f07f7 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.8' + version: '1.1.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d9f681d428..d59db10e79 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.8' + version: '1.3.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 4a1d440a7e..8604dbc9ae 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.8', + version: '2.9.0-rc.9', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 58692bce87..8df4c3400d 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.8' + version: '1.10.3-rc290.9' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 4140534a7b..6fd362836d 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.8' + version: '1.6.2-rc290.9' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index bd9f421c5f..567889b2e2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.8' + version: '1.9.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f6427562ee..457dc1ad34 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.8' + version: '1.16.3-rc290.9' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 7237cba836..05e860f139 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.8', + version: '4.12.1-rc290.9', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 9bce2dbc03..5c82c54e57 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.8" + version: "2.1.3-rc290.9" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index cec51732f4..9f3a4f4543 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.8", + version: "1.5.1-rc290.9", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 2c97c91826..1d9ad78afb 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.8", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4f0b33d677..26f0938117 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.8" + version: "3.2.1-rc290.9" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index f75624bb27..434358825b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.8", + version: "0.12.2-rc290.9", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 3b2717ad26..82b8848839 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.8', + version: '1.8.3-rc290.9', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 60a1d789a6..421eeadf32 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.8' + version: '1.3.1-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 0d9db0ec90..722d3c7250 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.8', + version: '1.3.2-rc290.9', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 89b1031fc2..8f731c5e2c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.8' + version: '1.2.2-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index faf2ae233d..05bd32186a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.8' + version: '1.3.2-rc290.9' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 28c33cf702..21052010f4 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.8', + version: '4.6.4-rc290.9', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 2340c02251..9f4b7f643b 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.8", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e916ee9c2a..596b7d924c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.8", + "version": "2.9.0-rc.9", "recommended": false, "official": false, "description": "Meteor experimental release" From 5a165057d8def0ed613a0e549b70a9b9c20afd6f Mon Sep 17 00:00:00 2001 From: arggh <17210302+arggh@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:57:26 +0200 Subject: [PATCH 188/293] Handle array item updates --- packages/mongo/oplog_v2_converter.js | 15 +++++ packages/mongo/oplog_v2_converter_tests.js | 65 ++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 952a37478f..35f289a0f8 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -46,6 +46,12 @@ function isArrayOperator(operator) { return operator.a === true && Object.keys(operator).every(isArrayOperatorKey); } +const arrayUpdateRegex = /^(u\d+)$/; + +function isArrayUpdate(operator) { + return arrayUpdateRegex.test(operator); +} + function flattenObjectInto(target, source, prefix) { if (Array.isArray(source) || typeof source !== 'object' || source === null) { target[prefix] = source; @@ -85,6 +91,15 @@ function convertOplogDiff(oplogEntry, diff, prefix) { Object.entries(value).forEach(([key, value]) => { oplogEntry.$set[join(prefix, key)] = value; }); + } else if (isArrayUpdate(diffKey)) { + const positionKey = join(prefix, diffKey.slice(1)); + if (value === null) { + oplogEntry.$unset ??= {}; + oplogEntry.$unset[positionKey] = true; + } else { + oplogEntry.$set ??= {}; + oplogEntry.$set[positionKey] = value; + } } else { // Handle s-fields. const key = diffKey.slice(1); diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index f87c8877f3..79bcbada93 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,6 +77,71 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], + [ + { + $v: 2, + diff: { + sitems: { + a: true, + s0: { + u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, + sbio: { u: { en: 'Just Alice' } }, + slanguages: { + a: true, + s0: { + u: { englishName: 'English', key: 'en', localName: 'English' }, + }, + }, + }, + u1: { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { en: 'Fictional character', sv: '' }, + bio: { en: 'Just Bob', sv: '' }, + avatar: null, + languages: [ + { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, + ], + }, + u2: null + }, + }, + }, + { + $v: 2, + $set: { + 'items.0.id': 'm57DsX8g8L66bM5JX', + 'items.0.name': 'Alice', + 'items.0.bio.en': 'Just Alice', + 'items.0.languages.0.englishName': 'English', + 'items.0.languages.0.key': 'en', + 'items.0.languages.0.localName': 'English', + 'items.1': { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { + en: 'Fictional character', + sv: '', + }, + bio: { + en: 'Just Bob', + sv: '', + }, + avatar: null, + languages: [ + { + key: 'sv', + englishName: 'Swedish', + localName: 'Sverige', + }, + ], + }, + }, + $unset: { + 'items.2': true + } + }, + ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { From fd0a83fb09a8d9f9863f39d12bd2db512fa06770 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 13:13:30 -0300 Subject: [PATCH 189/293] docs: updated info about vue 3 docs --- docs/history.md | 3 ++ docs/source/commandline.md | 76 ++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/docs/history.md b/docs/history.md index 200fbb8bca..f92ca1591a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -15,6 +15,9 @@ * Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) * [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) * updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) + + #### Breaking Changes * Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 43622ccf07..cbc61b8e86 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -133,6 +133,12 @@ Create a basic [Vue 3](https://vuejs.org/) app. `--react` +Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) +for more information. This is the default. + +`--angular` +for more information. + `--vue-2` Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) @@ -157,39 +163,39 @@ Create a basic [Solid](https://www.solidjs.com/) app. **Packages** | | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:|:---------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | -| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | +| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | +| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | +| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | +| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | +| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | +| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | +| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | +| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | +| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | +| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | +| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | +| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | +| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | +| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | +| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | +| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X |

meteor generate

@@ -932,8 +938,8 @@ The `meteor node` command calls the [`node`](https://nodejs.org) version bundled with Meteor itself. > This is not to be confused with [`meteor shell`](#meteorshell), which provides -an almost identical experience but also gives you access to the "server" context -of a Meteor application. Typically, `meteor shell` will be preferred. +> an almost identical experience but also gives you access to the "server" context +> of a Meteor application. Typically, `meteor shell` will be preferred. Additional parameters can be passed in the same way as the `node` command, and the [Node.js documentation](https://nodejs.org/dist/latest-v4.x/docs/api/cli.html) From 6423bdae02806c70d6f6509e72d4c99a9ee4697b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 16:03:25 -0300 Subject: [PATCH 190/293] docs: updated Special thanks to --- docs/history.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/history.md b/docs/history.md index f92ca1591a..5bc2fec0f5 100644 --- a/docs/history.md +++ b/docs/history.md @@ -91,6 +91,18 @@ * `weibo-oauth@1.3.2` - Asyncfied methods. +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@edimarlnx](https://github.com/edimarlnx) +- [@matheusccastroo](https://github.com/matheusccastroo) +- [@Grubba27](https://github.com/Grubba27) +- [@StorytellerCZ](https://github.com/StorytellerCZ) +- [@radekmie](https://github.com/radekmie) +- [@piotrpospiech](https://github.com/piotrpospiech) +- [@harryadel](https://github.com/harryadel) + +For making this great framework even better! + ## v2.8.2, 2022-11-29 From 855c02447baf0e18f49e8c0c8cc6d3a9bea3bfbe Mon Sep 17 00:00:00 2001 From: arggh <17210302+arggh@users.noreply.github.com> Date: Mon, 5 Dec 2022 23:26:20 +0200 Subject: [PATCH 191/293] Streamline array operation handling --- packages/mongo/oplog_v2_converter.js | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 35f289a0f8..43c6e64411 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|u\d+)$/; +const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -46,12 +46,6 @@ function isArrayOperator(operator) { return operator.a === true && Object.keys(operator).every(isArrayOperatorKey); } -const arrayUpdateRegex = /^(u\d+)$/; - -function isArrayUpdate(operator) { - return arrayUpdateRegex.test(operator); -} - function flattenObjectInto(target, source, prefix) { if (Array.isArray(source) || typeof source !== 'object' || source === null) { target[prefix] = source; @@ -91,15 +85,6 @@ function convertOplogDiff(oplogEntry, diff, prefix) { Object.entries(value).forEach(([key, value]) => { oplogEntry.$set[join(prefix, key)] = value; }); - } else if (isArrayUpdate(diffKey)) { - const positionKey = join(prefix, diffKey.slice(1)); - if (value === null) { - oplogEntry.$unset ??= {}; - oplogEntry.$unset[positionKey] = true; - } else { - oplogEntry.$set ??= {}; - oplogEntry.$set[positionKey] = value; - } } else { // Handle s-fields. const key = diffKey.slice(1); @@ -111,7 +96,9 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (value === null) { + if (position[0] === 's') { + convertOplogDiff(oplogEntry, value, positionKey); + } else if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { From 67abe134598f5ffe0ef225482feb0aa6a2c76578 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 18:54:36 -0300 Subject: [PATCH 192/293] Meteor version to 2.9.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 7213f5f9bc..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.9', + version: '2.2.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b4ff252406..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.9", + version: "1.4.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c706bf0c25..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.9', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index cd6e31c746..00bd03b3be 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.9' + version: '7.10.1' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 35b97f5ade..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.9', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 85e29c433a..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.9' + version: '1.11.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index e2df30d6f8..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.9' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 4719cc5fe7..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.9", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f7f81f07f7..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.9' + version: '1.1.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d59db10e79..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.9' + version: '1.3.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 8604dbc9ae..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.9', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8df4c3400d..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.9' + version: '1.10.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 6fd362836d..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.9' + version: '1.6.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 567889b2e2..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.9' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 457dc1ad34..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.9' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 05e860f139..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.9', + version: '4.12.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 5c82c54e57..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.9" + version: "2.1.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 9f3a4f4543..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.9", + version: "1.5.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 1d9ad78afb..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.9", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 26f0938117..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.9" + version: "3.2.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 434358825b..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.9", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 82b8848839..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.9', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 421eeadf32..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.9' + version: '1.3.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 722d3c7250..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.9', + version: '1.3.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 8f731c5e2c..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.9' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 05bd32186a..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.9' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21052010f4..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.9', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9f4b7f643b..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.9", + version: "1.3.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 596b7d924c..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.9", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" From a17d68ecac054c59025236f96c0a7b9b0f99b0c9 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 10:36:29 -0300 Subject: [PATCH 193/293] tests: trying to solve missing wrong tests --- npm-packages/meteor-babel/package-lock.json | 77 +++++++++++++++++++++ npm-packages/meteor-babel/package.json | 2 + 2 files changed, 79 insertions(+) diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index b3d0d406f2..9d70f46c4e 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -26,6 +26,8 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { @@ -3060,6 +3062,17 @@ "node": ">=4" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -3361,6 +3374,29 @@ "asap": "~2.0.6" } }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -3478,6 +3514,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -6144,6 +6188,14 @@ "chalk": "^2.0.1" } }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -6389,6 +6441,23 @@ "asap": "~2.0.6" } }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -6487,6 +6556,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 0dd8a7b838..397b271404 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -47,6 +47,8 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { From 9d8fb1e0238d7833a6edb55f98677b8154f81e9c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 10:46:45 -0300 Subject: [PATCH 194/293] tests: added flag and tested --- npm-packages/meteor-babel/options.js | 13 ++++++++----- npm-packages/meteor-babel/package.json | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 41bc4a2363..60611ea3a9 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,11 +80,14 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push( - [require("@babel/preset-react"), { - runtime: "automatic" - }] - ); + // get flag passed in args BABEL_TESTING + const reactBabel = + process.env.BABEL_TESTING + ? require("@babel/preset-react") + : [require("@babel/preset-react"), { + runtime: "automatic" + }]; + options.presets.push(reactBabel); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 397b271404..39420149f6 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -18,7 +18,7 @@ ], "main": "index.js", "scripts": { - "test": "test/run.sh", + "test": "BABEL_TESTING=1 test/run.sh", "update-versions": "bash scripts/update-versions" }, "homepage": "https://github.com/meteor/babel", From b4e0732b19779ce898ee4c5ee5d0c494f0563e69 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 11:05:59 -0300 Subject: [PATCH 195/293] test: upgraded modules deps --- tools/tests/apps/modules/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 86b12e64ff..8c0b126ecf 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,7 +26,8 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react-dom": "^16.8.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", "stripe": "^4.4.0", From f28f7a4aca759676e4d0c5ef785b49bdee239387 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 11:28:58 -0300 Subject: [PATCH 196/293] tests: changed deps --- tools/tests/apps/modules/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 8c0b126ecf..817740ad15 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,8 +26,8 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^16.8.6", + "react-dom": "^16.8.6", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", "stripe": "^4.4.0", From 3fe390df89c4a5b69892306377144811d329f2fd Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 13:58:37 -0300 Subject: [PATCH 197/293] chore: revert to withou runtime automatic --- npm-packages/meteor-babel/options.js | 9 +-- npm-packages/meteor-babel/package-lock.json | 81 +-------------------- npm-packages/meteor-babel/package.json | 6 +- 3 files changed, 5 insertions(+), 91 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 60611ea3a9..dc215572b8 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,14 +80,7 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - // get flag passed in args BABEL_TESTING - const reactBabel = - process.env.BABEL_TESTING - ? require("@babel/preset-react") - : [require("@babel/preset-react"), { - runtime: "automatic" - }]; - options.presets.push(reactBabel); + options.presets.push(require("@babel/preset-react")); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 9d70f46c4e..17c5612fb7 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,12 +1,12 @@ { "name": "@meteorjs/babel", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@meteorjs/babel", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "dependencies": { "@babel/core": "^7.17.2", @@ -26,8 +26,6 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { @@ -3062,17 +3060,6 @@ "node": ">=4" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -3374,29 +3361,6 @@ "asap": "~2.0.6" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -3514,14 +3478,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -6188,14 +6144,6 @@ "chalk": "^2.0.1" } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -6441,23 +6389,6 @@ "asap": "~2.0.6" } }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -6556,14 +6487,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 39420149f6..6733ac41b8 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -18,7 +18,7 @@ ], "main": "index.js", "scripts": { - "test": "BABEL_TESTING=1 test/run.sh", + "test": "test/run.sh", "update-versions": "bash scripts/update-versions" }, "homepage": "https://github.com/meteor/babel", @@ -47,8 +47,6 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { From 35123ff3a0fd912ab799bdcaf2fcafd3ab4956a6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:03:44 -0300 Subject: [PATCH 198/293] Revert "Meteor version to 2.9.0 :comet:" This reverts commit 67abe134598f5ffe0ef225482feb0aa6a2c76578. --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 61a19fd4ba..7213f5f9bc 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6', + version: '2.2.6-rc290.9', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index d26a1ff571..b4ff252406 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2", + version: "1.4.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 719191d8dc..c706bf0c25 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2', + version: '2.3.2-rc290.9', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 00bd03b3be..cd6e31c746 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1' + version: '7.10.1-rc290.9' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index a43b8dec7e..adb2b73436 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index cc02138f6d..35b97f5ade 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3', + version: '2.2.3-rc290.9', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 98b393d2a9..85e29c433a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2' + version: '1.11.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2316e275a2..e2df30d6f8 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1' + version: '1.4.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 141c79e6c6..4719cc5fe7 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3", + version: "1.4.3-rc290.9", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index e5049f19cf..f7f81f07f7 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2' + version: '1.1.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 36e4dbb76c..d59db10e79 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2' + version: '1.3.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bafb59a62e..8604dbc9ae 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0', + version: '2.9.0-rc.9', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7007d77957..8df4c3400d 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3' + version: '1.10.3-rc290.9' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 373e5ae579..6fd362836d 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2' + version: '1.6.2-rc290.9' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 2353ea1305..567889b2e2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1' + version: '1.9.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index e744c56705..457dc1ad34 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3' + version: '1.16.3-rc290.9' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..05e860f139 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.12.1-rc290.9', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4b56f43d33..5c82c54e57 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3" + version: "2.1.3-rc290.9" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 7435caf024..9f3a4f4543 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1", + version: "1.5.1-rc290.9", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4ba099aa41..1d9ad78afb 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 78a084498d..26f0938117 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1" + version: "3.2.1-rc290.9" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index fcf72881c5..434358825b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2", + version: "0.12.2-rc290.9", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 7d6b2746e9..82b8848839 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3', + version: '1.8.3-rc290.9', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..421eeadf32 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.1-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 57e3474024..722d3c7250 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2', + version: '1.3.2-rc290.9', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 21a7a053f3..8f731c5e2c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2' + version: '1.2.2-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 62d7646ca8..05bd32186a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2' + version: '1.3.2-rc290.9' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..21052010f4 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.6.4-rc290.9', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e2de8dd3ba..9f4b7f643b 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index acce35a806..596b7d924c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.9.0-rc.9", "recommended": false, "official": false, "description": "Meteor experimental release" From de7c362f51e3ff1d94091124da08c62bfec6ef45 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:08:57 -0300 Subject: [PATCH 199/293] Meteor version to 2.9.0-rc.10 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 4 ++-- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 7213f5f9bc..2fdbd097ff 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.9', + version: '2.2.6-rc290.10', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b4ff252406..a4f9d1f760 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.9", + version: "1.4.2-rc290.10", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c706bf0c25..1a9b0cc44e 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.9', + version: '2.3.2-rc290.10', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index cd6e31c746..79f88dafdc 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.9' + version: '7.10.1-rc290.10' }); Npm.depends({ - '@meteorjs/babel': '7.17.1-beta.0', + '@meteorjs/babel': '7.17.2-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..99bc638e1c 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4-rc290.10', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 35b97f5ade..156b5b5891 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.9', + version: '2.2.3-rc290.10', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 85e29c433a..f6173e8bbd 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.9' + version: '1.11.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index e2df30d6f8..3abbd6f03b 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.9' + version: '1.4.1-rc290.10' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 4719cc5fe7..c0662ce794 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.9", + version: "1.4.3-rc290.10", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f7f81f07f7..9d0ac88e3f 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.9' + version: '1.1.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d59db10e79..a0c3f040f1 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.9' + version: '1.3.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 8604dbc9ae..2a7ebccfdb 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.9', + version: '2.9.0-rc.10', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8df4c3400d..fa1569d14b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.9' + version: '1.10.3-rc290.10' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 6fd362836d..18cfc3115e 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.9' + version: '1.6.2-rc290.10' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 567889b2e2..bc8a8550a8 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.9' + version: '1.9.1-rc290.10' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 457dc1ad34..79795008ba 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.9' + version: '1.16.3-rc290.10' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 05e860f139..634e484142 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.9', + version: '4.12.1-rc290.10', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 5c82c54e57..f6c726d0fb 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.9" + version: "2.1.3-rc290.10" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 9f3a4f4543..30aea80fa8 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.9", + version: "1.5.1-rc290.10", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 1d9ad78afb..2ca4f53d53 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.9", + version: "1.3.2-rc290.10", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 26f0938117..da8a145ccf 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.9" + version: "3.2.1-rc290.10" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 434358825b..61fb69da02 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.9", + version: "0.12.2-rc290.10", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 82b8848839..d5436e0e06 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.9', + version: '1.8.3-rc290.10', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 421eeadf32..3fe5bec067 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.9' + version: '1.3.1-rc290.10' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 722d3c7250..7ff78fe3de 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.9', + version: '1.3.2-rc290.10', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 8f731c5e2c..057da42bf8 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.9' + version: '1.2.2-rc290.10' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 05bd32186a..85d14f7f81 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.9' + version: '1.3.2-rc290.10' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21052010f4..9821047c54 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.9', + version: '4.6.4-rc290.10', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9f4b7f643b..e00d7e3006 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.9", + version: "1.3.2-rc290.10", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 596b7d924c..1aed99450b 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.9", + "version": "2.9.0-rc.10", "recommended": false, "official": false, "description": "Meteor experimental release" From b78112b2d0461cb9c78d1849560bc837356ae125 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:10:49 -0300 Subject: [PATCH 200/293] tests: Revert Adition of react in package.json --- tools/tests/apps/modules/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 817740ad15..86b12e64ff 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,7 +26,6 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react": "^16.8.6", "react-dom": "^16.8.6", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", From 3098bf72fb301ff3596c12b2c29d4bbcec134089 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 15:02:22 -0300 Subject: [PATCH 201/293] tests: adjusting missing tests --- .../babel-compiler/.npm/package/npm-shrinkwrap.json | 12 ++++++------ tools/tests/shell-tests.js | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 6b29dfbba0..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -648,9 +648,9 @@ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001435", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", - "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==" + "version": "1.0.30001436", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", + "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" }, "chalk": { "version": "2.4.2", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 037106c245..1db92c6eaa 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -14,8 +14,8 @@ selftest.define("meteor shell", function () { // First try a simple one-line expression. shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); - shell.waitSecs(10); - shell.match('{"server":true}'); + shell.waitSecs(20); + shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From c42eff7141e9f51f707a9eb195beccc872e0523e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 15:57:32 -0300 Subject: [PATCH 202/293] tests: changed a little bit --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- tools/tests/shell-tests.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..248dfa3f33 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 1db92c6eaa..7b4c1a05e1 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("({server:Meteor.isServer})\n"); + shell.write("{server:Meteor.isServer}\n"); + shell.match('{server:true}'); shell.proc.stdin.end(); shell.waitSecs(20); - shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 11b0d0a8f8f20ad75147cb8a9ebed702175b7b9c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:23:22 -0300 Subject: [PATCH 203/293] Revert "tests: changed a little bit" This reverts commit c42eff7141e9f51f707a9eb195beccc872e0523e. --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- tools/tests/shell-tests.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 248dfa3f33..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 7b4c1a05e1..1db92c6eaa 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("{server:Meteor.isServer}\n"); - shell.match('{server:true}'); + shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); shell.waitSecs(20); + shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 810e55be4be0200799b07eef83cd6f63fb260bff Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:23:48 -0300 Subject: [PATCH 204/293] tests: twerked a little bit more --- tools/tests/shell-tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 1db92c6eaa..7b4c1a05e1 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("({server:Meteor.isServer})\n"); + shell.write("{server:Meteor.isServer}\n"); + shell.match('{server:true}'); shell.proc.stdin.end(); shell.waitSecs(20); - shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 3a9bed8b1fb55009749de252218a2b07c382ab4c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:32:49 -0300 Subject: [PATCH 205/293] chore: upgrade deps --- meteor | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meteor b/meteor index 9e615ab4c0..e1379039a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.1 +BUNDLE_VERSION=14.21.1.2 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 301661ce9c..c265734f8a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.1-beta.0", + "@meteorjs/babel": "7.17.2-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From e7092b70af4d3c69144dfe8ebd6b4584d7cd0a46 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:00:59 -0300 Subject: [PATCH 206/293] Meteor version to 2.9.0-rc.11 --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 2fdbd097ff..5e3e313715 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.10', + version: '2.2.6-rc290.11', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index a4f9d1f760..05e6f22fe7 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.10", + version: "1.4.2-rc290.11", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 1a9b0cc44e..96e8d9af97 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.10', + version: '2.3.2-rc290.11', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 79f88dafdc..53664bf356 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.10' + version: '7.10.1-rc290.11' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 99bc638e1c..d2ffb02434 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4-rc290.10', + version: '0.16.4-rc290.11', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 156b5b5891..947a49d19d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.10', + version: '2.2.3-rc290.11', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index f6173e8bbd..82bfe9999f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.10' + version: '1.11.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 3abbd6f03b..f0463ace26 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.10' + version: '1.4.1-rc290.11' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index c0662ce794..c2503db373 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.10", + version: "1.4.3-rc290.11", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9d0ac88e3f..9476455dea 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.10' + version: '1.1.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index a0c3f040f1..216cbe14bb 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.10' + version: '1.3.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 2a7ebccfdb..788aa39f16 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.10', + version: '2.9.0-rc.11', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index fa1569d14b..11fa4d2e1f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.10' + version: '1.10.3-rc290.11' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 18cfc3115e..0e1c67b833 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.10' + version: '1.6.2-rc290.11' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index bc8a8550a8..9f03acbcaa 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.10' + version: '1.9.1-rc290.11' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 79795008ba..cc0a0789e2 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.10' + version: '1.16.3-rc290.11' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 634e484142..6c8b37b275 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.10', + version: '4.12.1-rc290.11', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f6c726d0fb..8f07f1c302 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.10" + version: "2.1.3-rc290.11" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 30aea80fa8..0b6a54db9a 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.10", + version: "1.5.1-rc290.11", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 2ca4f53d53..e37609c30c 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.10", + version: "1.3.2-rc290.11", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index da8a145ccf..507a91f383 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.10" + version: "3.2.1-rc290.11" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 61fb69da02..bba347be62 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.10", + version: "0.12.2-rc290.11", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index d5436e0e06..319f504d5f 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.10', + version: '1.8.3-rc290.11', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 3fe5bec067..c0a4593856 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.10' + version: '1.3.1-rc290.11' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 7ff78fe3de..d6e032eda0 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.10', + version: '1.3.2-rc290.11', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 057da42bf8..4df49926f6 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.10' + version: '1.2.2-rc290.11' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 85d14f7f81..e239da705d 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.10' + version: '1.3.2-rc290.11' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 9821047c54..fc46024760 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.10', + version: '4.6.4-rc290.11', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e00d7e3006..9beb6e14a2 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.10", + version: "1.3.2-rc290.11", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 1aed99450b..0a951d5127 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.10", + "version": "2.9.0-rc.11", "recommended": false, "official": false, "description": "Meteor experimental release" From cf818aa33a2a3e05328477954631c73795923f6e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:18:56 -0300 Subject: [PATCH 207/293] tests: tried solving test again --- tools/tests/shell-tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 7b4c1a05e1..e86b5c850e 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -13,7 +13,7 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. shell.write("{server:Meteor.isServer}\n"); - shell.match('{server:true}'); + shell.match('{ server: true }'); shell.proc.stdin.end(); shell.waitSecs(20); shell.expectExit(0); From 1b87c1f892b93e8e2aac3e2e070f3df24044ae79 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:34:21 -0300 Subject: [PATCH 208/293] chore: updated version --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..248dfa3f33 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", From 037d68615c60eb794cbe7e5dd8ab8c6e96b79177 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:53:47 -0300 Subject: [PATCH 209/293] tests: tried again --- tools/tests/shell-tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index e86b5c850e..e227420589 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -13,9 +13,9 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. shell.write("{server:Meteor.isServer}\n"); - shell.match('{ server: true }'); shell.proc.stdin.end(); shell.waitSecs(20); + shell.match('{ server: true }'); shell.expectExit(0); shell = s.run("shell"); From a720c329c4b4229f2c34f0a87a8d3436956fb70a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:38:59 -0300 Subject: [PATCH 210/293] chore: updated shrink json --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 248dfa3f33..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", From 2e1e500dd0cbf89a628b795d57930679fb11467d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:39:10 -0300 Subject: [PATCH 211/293] tests: reverted shell tests --- tools/tests/shell-tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index e227420589..037106c245 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("{server:Meteor.isServer}\n"); + shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); - shell.waitSecs(20); - shell.match('{ server: true }'); + shell.waitSecs(10); + shell.match('{"server":true}'); shell.expectExit(0); shell = s.run("shell"); From 6177dc0fb3c25b7967374a9f622d4f5840036ccc Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:39:41 -0300 Subject: [PATCH 212/293] tests: changed how to create prompt --- tools/cli/commands.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index c729511e9c..22ffdebaeb 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1,7 +1,5 @@ var main = require('./main.js'); var _ = require('underscore'); -const readline = require('readline') - .createInterface({ input: process.stdin, output: process.stdout }); var files = require('../fs/files'); var deploy = require('../meteor-services/deploy.js'); var buildmessage = require('../utils/buildmessage.js'); @@ -2549,10 +2547,12 @@ main.registerCommand({ /** * * @param question - * @returns {Promise} + * @returns {function(string): Promise} */ -const ask = async (question) => { - return new Promise((resolve, reject) => { +const createPrompt = () => { + const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); + return async (question) => new Promise((resolve, reject) => { readline.question(question, (answer) => { resolve(answer); }) @@ -2614,6 +2614,7 @@ main.registerCommand({ const setup = async (arg0) => { if (arg0 === undefined) { + const ask = createPrompt(); // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); checkScaffoldName(scaffoldName); From 582377be50cd4241a7ccb4d02692521098ac3a5e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 23:14:17 -0300 Subject: [PATCH 213/293] tests: testing something in the CI --- packages/test-in-console/puppeteerRunner.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index a2d07f633f..2db0a0e7a4 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -4,9 +4,7 @@ async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - if (msg._text !== undefined) { - console.log(msg._text); - } + console.log(msg._text); }); if (!process.env.URL) { From 908d29b2664f4948393d15da66baca9e12f4f0c0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 00:09:40 -0300 Subject: [PATCH 214/293] test: update to solution --- packages/test-in-console/puppeteerRunner.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index 2db0a0e7a4..c8c8d58ac7 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,10 +1,15 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); +let testNumber = 0; async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - console.log(msg._text); + // this is a way to make sure the travis does not timeout + // if the test is running for too long without any output to the console (10 minutes) + if (msg._text !== undefined) console.log(msg._text); + else console.log(`Test number ${testNumber}`); + testNumber++; }); if (!process.env.URL) { From c5a81188c62058c5a5ef119b9039133c7739acad Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 00:30:26 -0300 Subject: [PATCH 215/293] test: formated code and adjusted codestyle --- packages/test-in-console/puppeteerRunner.js | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index c8c8d58ac7..c6509bd93d 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,6 +1,7 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); let testNumber = 0; + async function runNextUrl(browser) { const page = await browser.newPage(); @@ -8,7 +9,7 @@ async function runNextUrl(browser) { // this is a way to make sure the travis does not timeout // if the test is running for too long without any output to the console (10 minutes) if (msg._text !== undefined) console.log(msg._text); - else console.log(`Test number ${testNumber}`); + else console.log(`Test number: ${ testNumber }`); testNumber++; }); @@ -22,11 +23,15 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(`Tests complete with ${failCount} failures`); - console.log(`Tests complete with ${await getPassCount(page)} passes`); + console.log(` + The number of tests from Test number may be different because + of the way the test is written. causing the test to fail or + to run more than once. in the console. Test number total: ${ testNumber }`); + console.log(`Tests complete with ${ failCount } failures`); + console.log(`Tests complete with ${ await getPassCount(page) } passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); + failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); await page.close(); await browser.close(); process.exit(1); @@ -49,7 +54,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -64,7 +69,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -79,7 +84,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -98,7 +103,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -107,11 +112,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${process.env.URL}`); + console.log(`Running test with Puppeteer at ${ process.env.URL }`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${await browser.version()}`); + console.log(`Using version: ${ await browser.version() }`); runNextUrl(browser); } From 9461b5c67760fa581afcd38107c070d2662dde71 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:03:36 -0300 Subject: [PATCH 216/293] docs: reverted babel feature --- docs/history.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docs/history.md b/docs/history.md index 5bc2fec0f5..346edbfca1 100644 --- a/docs/history.md +++ b/docs/history.md @@ -29,13 +29,8 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.17.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 * `accounts-base@2.2.6` - Moved some functions to accounts-oauth. * `accounts-oauth@1.4.2` @@ -121,9 +116,6 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) From 20506ec6bc9ec2636ce6b06b1d15ea5019e63eb6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:04:06 -0300 Subject: [PATCH 217/293] docs: adjust docs to not use I --- docs/source/commandline.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index cbc61b8e86..c7d9f07796 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -273,10 +273,6 @@ Meteor.methods({ import { Meteor } from 'meteor/meteor'; import { CustomerCollection } from './collection'; -Meteor.publish('CustomersByLoggedUser', function publishCustomersByUserId() { - return CustomerCollection.find({ userId: this.userId }); -}); - Meteor.publish('allCustomers', function publishCustomers() { return CustomerCollection.find({}); }); @@ -307,7 +303,7 @@ Also, there is the same version of these methods using TypeScript, that will be

path option

for those that may want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. -It will generate the model in that path. Note that I'm using TypeScript in this example. +It will generate the model in that path. Note that is used TypeScript in this example. ```bash @@ -383,10 +379,6 @@ Meteor.methods({ import { Meteor } from 'meteor/meteor'; import { AnotherCustomerCollection } from './collection'; -Meteor.publish('AnotherCustomersByLoggedUser', function publishAnotherCustomersByUserId(this) { - return AnotherCustomerCollection.find({ userId: this.userId }); -}); - Meteor.publish('allAnotherCustomers', function publishAnotherCustomers() { return AnotherCustomerCollection.find({}); }); @@ -443,9 +435,9 @@ meteor generate feed --templatePath=/scaffolds-ts You can use your own templates for scaffolding your specific workloads. To do that, you should pass in a template directory URL so that it can copy it with its changes. -

how do I rename things?

+

how to rename things?

-Out of the box I provide a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` +Out of the box is provided a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` these replacements come from this function: @@ -461,7 +453,7 @@ const transformName = (name) => { } ``` -

What if I want to have my own way of templating?

+

How to bring your own templates?

`--replaceFn` From d810947c976739fc8cc5020d4d08b660697ba979 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:07:54 -0300 Subject: [PATCH 218/293] docs: updated ponctuation --- docs/source/commandline.md | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index c7d9f07796..4bc88ae0aa 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -199,7 +199,7 @@ Create a basic [Solid](https://www.solidjs.com/) app.

meteor generate

-``meteor generate`` is a command for generating scaffolds for your current project. when ran without arguments, it will ask +``meteor generate`` is a command for generating scaffolds for your current project. When ran without arguments, it will ask you what is the name of the model you want to generate, if you do want methods for your api and publications. It can be used as a command line only operation as well. @@ -209,10 +209,10 @@ meteor generate customer ``` -it will generate the following code in ``/imports/api`` +It will generate the following code in ``/imports/api`` ![Screenshot 2022-11-09 at 11 28 29](https://user-images.githubusercontent.com/70247653/200856551-71c100f5-8714-4b34-9678-4f08780dcc8b.png) -that will have the following code: +That will have the following code:

collection.js

@@ -264,8 +264,6 @@ Meteor.methods({ - -

publication.js

```js @@ -283,8 +281,6 @@ Meteor.publish('allCustomers', function publishCustomers() { - -

index.js

```js @@ -295,14 +291,11 @@ export * from './publications'; ``` - - - Also, there is the same version of these methods using TypeScript, that will be shown bellow.

path option

-for those that may want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. +If you want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. It will generate the model in that path. Note that is used TypeScript in this example. ```bash @@ -311,7 +304,7 @@ meteor generate another-customer --path=server/admin ``` -it will generate in ``server/admin`` the another-client code: +It will generate in ``server/admin`` the another-client code: ![Screenshot 2022-11-09 at 11 32 39](https://user-images.githubusercontent.com/70247653/200857560-a4874e4c-1078-4b7a-9381-4c6590d2f63b.png) @@ -405,13 +398,13 @@ export * from './publications';

Using the Wizard

-if you run the following command: +If you run the following command: ```bash meteor generate ``` -it will prompt the following questions. +It will prompt the following questions. ![Screenshot 2022-11-09 at 11 38 29](https://user-images.githubusercontent.com/70247653/200859087-a2ef63b6-7ac1-492b-8918-0630cbd30686.png) @@ -435,13 +428,13 @@ meteor generate feed --templatePath=/scaffolds-ts You can use your own templates for scaffolding your specific workloads. To do that, you should pass in a template directory URL so that it can copy it with its changes. -

how to rename things?

+

How to rename things?

Out of the box is provided a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` these replacements come from this function: -_note that scaffoldName is the name that you have passed as argument_ +_Note that scaffoldName is the name that you have passed as argument_ ```js const transformName = (name) => { @@ -471,12 +464,12 @@ export function transformContents(scaffoldName, contents, fileName) { } ``` -if you run your command like this: +If you run your command like this: ```bash meteor generate feed --replaceFn=/fn/replace.js ``` -it will generate files full of ``$$PascalCase$$``using the meteor provided templates. +It will generate files full of ``$$PascalCase$$``using the meteor provided templates. A better example of this feature would be the following js file: ```js From 9377b9e3ed3425228d5f4fd3ea1a15470918fc94 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:24:42 -0300 Subject: [PATCH 219/293] chore: updated to async scaffolds functions --- tools/static-assets/scaffolds-ts/methods.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 538010c1c6..d36e1cd42c 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -3,21 +3,21 @@ import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import { $$PascalName$$, $$PascalName$$Collection } from './collection'; -export function create(data: $$PascalName$$) { +export async function create(data: $$PascalName$$) { return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { +export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { check(_id, String); return $$PascalName$$Collection.updateAsync(_id, { ...data }); } -export function remove(_id: string) { +export async function remove(_id: string) { check(_id, String); return $$PascalName$$Collection.removeAsync(_id); } -export function findById(_id: string) { +export async function findById(_id: string) { check(_id, String); return $$PascalName$$Collection.findOneAsync(_id); } From a9fcd3695b516665acd6fa6124e0100b862adf5e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:24:47 -0300 Subject: [PATCH 220/293] chore: updated to async scaffolds functions in js --- tools/static-assets/scaffolds-js/methods.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 1b7156c792..415f0ebb0a 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -2,21 +2,21 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { $$PascalName$$Collection } from './collection'; -export function create(data) { +export async function create(data) { return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id, data) { +export async function update(_id, data) { check(_id, String); return $$PascalName$$Collection.updateAsync(_id, { ...data }); } -export function remove(_id) { +export async function remove(_id) { check(_id, String); return $$PascalName$$Collection.removeAsync(_id); } -export function findById(_id) { +export async function findById(_id) { check(_id, String); return $$PascalName$$Collection.findOneAsync(_id); } From 3ecc388e8d32a81c516a15268e936843429d2b8f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:25:01 -0300 Subject: [PATCH 221/293] docs: updated to async scaffolds functions --- docs/source/commandline.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 4bc88ae0aa..ebb9381d3a 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -234,21 +234,21 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { CustomerCollection } from './collection'; -export function create(data) { +export async function create(data) { return CustomerCollection.insertAsync({ ...data }); } -export function update(_id, data) { +export async function update(_id, data) { check(_id, String); return CustomerCollection.updateAsync(_id, { ...data }); } -export function remove(_id) { +export async function remove(_id) { check(_id, String); return CustomerCollection.removeAsync(_id); } -export function findById(_id) { +export async function findById(_id) { check(_id, String); return CustomerCollection.findOneAsync(_id); } @@ -334,21 +334,21 @@ import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import { AnotherCustomer, AnotherCustomerCollection } from './collection'; -export function create(data: AnotherCustomer) { +export async function create(data: AnotherCustomer) { return AnotherCustomerCollection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier) { +export async function update(_id: string, data: Mongo.Modifier) { check(_id, String); return AnotherCustomerCollection.updateAsync(_id, { ...data }); } -export function remove(_id: string) { +export async function remove(_id: string) { check(_id, String); return AnotherCustomerCollection.removeAsync(_id); } -export function findById(_id: string) { +export async function findById(_id: string) { check(_id, String); return AnotherCustomerCollection.findOneAsync(_id); } From 48b6e9ca46ad3b9072729b8d8ec425bb6a4399e7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:28:32 -0300 Subject: [PATCH 222/293] Meteor version to 2.9.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 5e3e313715..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.11', + version: '2.2.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 05e6f22fe7..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.11", + version: "1.4.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 96e8d9af97..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.11', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 53664bf356..a3ecdbed82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.11' + version: '7.10.1' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index d2ffb02434..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4-rc290.11', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 947a49d19d..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.11', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 82bfe9999f..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.11' + version: '1.11.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index f0463ace26..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.11' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index c2503db373..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.11", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9476455dea..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.11' + version: '1.1.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 216cbe14bb..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.11' + version: '1.3.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 788aa39f16..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.11', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 11fa4d2e1f..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.11' + version: '1.10.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 0e1c67b833..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.11' + version: '1.6.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9f03acbcaa..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.11' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index cc0a0789e2..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.11' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 6c8b37b275..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.11', + version: '4.12.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8f07f1c302..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.11" + version: "2.1.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 0b6a54db9a..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.11", + version: "1.5.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index e37609c30c..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.11", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 507a91f383..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.11" + version: "3.2.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bba347be62..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.11", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 319f504d5f..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.11', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index c0a4593856..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.11' + version: '1.3.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index d6e032eda0..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.11', + version: '1.3.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 4df49926f6..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.11' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index e239da705d..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.11' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index fc46024760..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.11', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9beb6e14a2..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.11", + version: "1.3.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 0a951d5127..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.11", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 5164930456ef3e2116e636ccc69ea8478762b89a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 13:48:36 -0300 Subject: [PATCH 223/293] =?UTF-8?q?Meteor=20version=20to=202.9.0=C2=A0:com?= =?UTF-8?q?et:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/admin/meteor-release-official.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..27a0c865e4 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.9.0", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 20a31b84dfcf6c354c452e61076ef1b472df2f01 Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Sat, 10 Dec 2022 20:03:02 +0100 Subject: [PATCH 224/293] remove svelte-meteor-data --- tools/static-assets/skel-svelte/.meteor/packages | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 0e3c38c047..c09c0b86ad 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -20,5 +20,4 @@ autopublish # Publish all data to the clients (for prototyping) insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension -rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components hot-module-replacement # Update client in development without reloading the page From 8c3496a46bf089b986048708ae562b8ce63211e8 Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Sat, 10 Dec 2022 20:04:15 +0100 Subject: [PATCH 225/293] utilize collections on the client --- .../skel-svelte/imports/ui/App.svelte | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte index 4bbdfecdc4..31a4ae46de 100644 --- a/tools/static-assets/skel-svelte/imports/ui/App.svelte +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -1,8 +1,21 @@ @@ -13,10 +26,13 @@

You've pressed the button {counter} times.

Learn Meteor!

- + {#if subIsReady} +
    + {#each links as link (link._id)} +
  • {link.title}
  • + {/each} +
+ {:else} +
Loading ...
+ {/if} From e7808b3a550c83d0096a9b7f30e60670adcd2655 Mon Sep 17 00:00:00 2001 From: Drew Fisher Date: Sat, 10 Dec 2022 13:17:44 -0800 Subject: [PATCH 226/293] Fix fetch() type declaration `fetch()` is the type of `globalThis.fetch`; it is not a function which returns a `globalThis.fetch`. Fixes #12351. --- packages/fetch/fetch.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fetch/fetch.d.ts b/packages/fetch/fetch.d.ts index 8d6eb289ad..9fdaddd3fd 100644 --- a/packages/fetch/fetch.d.ts +++ b/packages/fetch/fetch.d.ts @@ -1,4 +1,4 @@ -export declare function fetch(): typeof globalThis.fetch; +export declare var fetch: typeof globalThis.fetch; export declare var Headers: typeof globalThis.Headers; export declare var Request: typeof globalThis.Request; export declare var Response: typeof globalThis.Response; From 39b66f0d1ee0ebdae4667c479861a4baeb912351 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 09:53:55 -0300 Subject: [PATCH 227/293] Meteor installer to 2.9.0 :commet: --- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..fcae57bcec 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.9.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 8afbd9c39e..53d344ef33 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.2", + "version": "2.9.0", "description": "Install Meteor", "main": "install.js", "scripts": { From 5d19fec09b195d3c3bfea8559ed039c10d253de7 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 09:53:19 -0400 Subject: [PATCH 228/293] Revert "Merge pull request #12273 from meteor/release-2.9" This reverts commit 19e9e2082ebdaa8dffa713e89a72790ef8bc731a, reversing changes made to 644592cedc70b1a7399bb9be214a4eb0ed598663. --- .circleci/config.yml | 64 +- .travis.yml | 14 +- docs/history.md | 119 +- docs/source/api/email.md | 22 - docs/source/commandline.md | 393 +- guide/_config.yml | 3 +- guide/source/2.9-migration.md | 102 - meteor | 2 +- .../eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 +- npm-packages/meteor-babel/options.js | 18 +- npm-packages/meteor-babel/package-lock.json | 3880 +---------------- npm-packages/meteor-babel/package.json | 6 +- npm-packages/meteor-babel/runtime.js | 24 +- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- packages/accounts-base/accounts_client.js | 5 - .../accounts-base/accounts_client_tests.js | 48 +- packages/accounts-base/accounts_common.js | 59 +- packages/accounts-base/accounts_server.js | 101 +- packages/accounts-base/accounts_tests.js | 56 - packages/accounts-base/package.js | 6 +- packages/accounts-oauth/oauth_common.js | 55 - packages/accounts-oauth/oauth_server.js | 43 - packages/accounts-oauth/package.js | 7 +- packages/accounts-password/package.js | 2 +- packages/accounts-password/password_client.js | 2 + packages/accounts-password/password_server.js | 113 +- packages/accounts-password/password_tests.js | 4 +- .../.npm/package/npm-shrinkwrap.json | 746 ++-- packages/babel-compiler/package.js | 4 +- packages/ecmascript/package.js | 2 +- packages/email/email.js | 133 +- packages/email/email_test_helpers.js | 21 - packages/email/email_tests.js | 582 +-- packages/email/email_tests_data.js | 254 -- packages/email/package.js | 2 +- packages/facebook-oauth/facebook_server.js | 137 +- packages/facebook-oauth/package.js | 3 +- packages/github-oauth/github_server.js | 29 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/google_server.js | 163 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/meetup_server.js | 83 +- packages/meetup-oauth/package.js | 3 +- .../meteor_developer_server.js | 126 +- packages/meteor-developer-oauth/package.js | 3 +- packages/meteor-tool/package.js | 2 +- packages/meteor/asl-helpers.js | 22 - packages/meteor/helpers.js | 34 +- packages/meteor/meteor.d.ts | 18 +- packages/meteor/package.js | 5 +- packages/minifier-css/minifier-async-tests.js | 51 - packages/minifier-css/minifier.js | 32 +- packages/minifier-css/package.js | 3 +- packages/minimongo/cursor.js | 6 +- packages/minimongo/local_collection.js | 8 - packages/minimongo/package.js | 2 +- packages/mongo/collection.js | 27 - packages/mongo/collection_async_tests.js | 11 - packages/mongo/mongo_driver.js | 12 - packages/mongo/oplog_v2_converter.js | 6 +- packages/mongo/oplog_v2_converter_tests.js | 65 - packages/mongo/package.js | 2 +- packages/mongo/remote_collection_driver.js | 21 +- .../.npm/package/npm-shrinkwrap.json | 374 +- packages/npm-mongo/package.js | 4 +- packages/oauth/oauth_server.js | 32 +- packages/oauth/package.js | 3 +- packages/oauth1/oauth1_binding.js | 92 +- packages/oauth1/oauth1_server.js | 10 +- packages/oauth1/oauth1_tests.js | 22 +- packages/oauth1/package.js | 7 +- packages/oauth2/oauth2_server.js | 4 +- packages/oauth2/oauth2_tests.js | 16 +- packages/oauth2/package.js | 2 +- .../package-version-parser-tests.js | 4 +- packages/package-version-parser/package.js | 5 +- packages/promise/package.js | 2 +- packages/promise/server.js | 14 +- packages/standard-minifier-css/package.js | 2 +- .../plugin/minify-css.js | 2 +- packages/test-helpers/async_multi.js | 30 +- packages/test-helpers/package.js | 5 +- packages/test-in-browser/driver.js | 4 +- packages/test-in-browser/package.js | 2 +- packages/test-in-console/puppeteerRunner.js | 32 +- packages/tinytest/package.js | 2 +- packages/tinytest/tinytest.js | 153 +- packages/tinytest/tinytest_server.js | 4 +- packages/twitter-oauth/package.js | 2 +- packages/twitter-oauth/twitter_server.js | 6 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 3 +- packages/weibo-oauth/weibo_server.js | 82 +- .../admin/meteor-release-experimental.json | 2 +- scripts/admin/meteor-release-official.json | 2 +- scripts/dev-bundle-tool-package.js | 2 +- tools/cli/commands-packages.js | 2 +- tools/cli/commands.js | 328 +- tools/cli/help.txt | 34 +- tools/console/console.js | 15 - tools/packaging/package-client.js | 1 + tools/static-assets/README.md | 8 - .../static-assets/scaffolds-js/collection.js | 3 - tools/static-assets/scaffolds-js/index.js | 3 - tools/static-assets/scaffolds-js/methods.js | 29 - .../scaffolds-js/publications.js | 6 - .../static-assets/scaffolds-ts/collection.ts | 9 - tools/static-assets/scaffolds-ts/index.ts | 3 - tools/static-assets/scaffolds-ts/methods.ts | 30 - .../scaffolds-ts/publications.ts | 6 - .../skel-apollo/.meteor/packages | 2 +- .../static-assets/skel-bare/.meteor/packages | 2 +- .../static-assets/skel-blaze/.meteor/packages | 3 +- .../skel-chakra-ui/.meteor/packages | 3 +- .../static-assets/skel-full/.meteor/packages | 1 - .../skel-minimal/.meteor/packages | 1 - .../static-assets/skel-react/.meteor/packages | 3 +- .../static-assets/skel-solid/.meteor/packages | 3 +- .../skel-svelte/.meteor/packages | 3 +- .../skel-tailwind/.meteor/packages | 3 +- .../skel-typescript/.meteor/packages | 3 +- .../skel-typescript/package.json | 2 +- tools/static-assets/skel-vue-2/.gitignore | 1 - .../skel-vue-2/.meteor/.gitignore | 1 - .../static-assets/skel-vue-2/.meteor/packages | 24 - .../skel-vue-2/.meteor/platforms | 2 - .../static-assets/skel-vue-2/client/main.html | 7 - tools/static-assets/skel-vue-2/client/main.js | 12 - .../skel-vue-2/imports/ui/App.vue | 26 - tools/static-assets/skel-vue-2/package.json | 23 - tools/static-assets/skel-vue-2/server/main.js | 3 - tools/static-assets/skel-vue-2/tests/main.js | 20 - .../skel-vue/.meteor/.finished-upgraders | 19 - tools/static-assets/skel-vue/.meteor/.id | 7 - tools/static-assets/skel-vue/.meteor/packages | 29 +- tools/static-assets/skel-vue/.meteor/release | 1 - tools/static-assets/skel-vue/.meteor/versions | 71 - tools/static-assets/skel-vue/README.md | 19 - tools/static-assets/skel-vue/client/main.css | 3 - tools/static-assets/skel-vue/client/main.html | 9 - tools/static-assets/skel-vue/client/main.js | 13 +- .../imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../imports/api/fixtures.js | 0 .../skel-vue/imports/api/links.js | 10 - .../imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../imports/api/methods/index.js | 0 .../imports/api/publications/index.js | 0 .../imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 .../skel-vue/imports/ui/About.vue | 5 - .../static-assets/skel-vue/imports/ui/App.vue | 30 +- .../skel-vue/imports/ui/AppMenu.vue | 6 - .../skel-vue/imports/ui/Hello.vue | 16 - .../skel-vue/imports/ui/Home.vue | 10 - .../skel-vue/imports/ui/Info.vue | 16 - .../imports/ui/components/Hello.vue | 0 .../imports/ui/components/Info.vue | 0 .../static-assets/skel-vue/imports/ui/main.js | 13 - .../imports/ui/plugins.js | 0 .../skel-vue/imports/ui/router.js | 18 - tools/static-assets/skel-vue/package.json | 14 +- .../static-assets/skel-vue/postcss.config.js | 6 - tools/static-assets/skel-vue/server/main.js | 34 +- .../static-assets/skel-vue/tailwind.config.js | 8 - tools/static-assets/skel-vue/tests/main.js | 26 +- tools/static-assets/skel-vue/vite.config.js | 12 - tools/tsconfig.json | 3 +- 171 files changed, 1748 insertions(+), 7983 deletions(-) delete mode 100644 guide/source/2.9-migration.md delete mode 100644 packages/email/email_test_helpers.js delete mode 100644 packages/email/email_tests_data.js delete mode 100644 packages/meteor/asl-helpers.js delete mode 100644 packages/minifier-css/minifier-async-tests.js delete mode 100644 tools/static-assets/scaffolds-js/collection.js delete mode 100644 tools/static-assets/scaffolds-js/index.js delete mode 100644 tools/static-assets/scaffolds-js/methods.js delete mode 100644 tools/static-assets/scaffolds-js/publications.js delete mode 100644 tools/static-assets/scaffolds-ts/collection.ts delete mode 100644 tools/static-assets/scaffolds-ts/index.ts delete mode 100644 tools/static-assets/scaffolds-ts/methods.ts delete mode 100644 tools/static-assets/scaffolds-ts/publications.ts delete mode 100644 tools/static-assets/skel-vue-2/.gitignore delete mode 100644 tools/static-assets/skel-vue-2/.meteor/.gitignore delete mode 100644 tools/static-assets/skel-vue-2/.meteor/packages delete mode 100644 tools/static-assets/skel-vue-2/.meteor/platforms delete mode 100644 tools/static-assets/skel-vue-2/client/main.html delete mode 100644 tools/static-assets/skel-vue-2/client/main.js delete mode 100644 tools/static-assets/skel-vue-2/imports/ui/App.vue delete mode 100644 tools/static-assets/skel-vue-2/package.json delete mode 100644 tools/static-assets/skel-vue-2/server/main.js delete mode 100644 tools/static-assets/skel-vue-2/tests/main.js delete mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders delete mode 100644 tools/static-assets/skel-vue/.meteor/.id delete mode 100644 tools/static-assets/skel-vue/.meteor/release delete mode 100644 tools/static-assets/skel-vue/.meteor/versions delete mode 100644 tools/static-assets/skel-vue/README.md delete mode 100644 tools/static-assets/skel-vue/client/main.css rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/fixtures.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/api/links.js rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/links.tests.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/components/Info.vue (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/main.js rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/plugins.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/router.js delete mode 100644 tools/static-assets/skel-vue/postcss.config.js delete mode 100644 tools/static-assets/skel-vue/tailwind.config.js delete mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 8dfa556f94..e8e1b5e52f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2.1 +version: 2 # A reusable "run" snippet which is ran before each test to setup the # environment for user-limits, core-dumps, etc. @@ -96,30 +96,6 @@ build_machine_environment: &build_machine_environment NUM_GROUPS: 12 RUNNING_AVG_LENGTH: 6 -can_disable_fibers: &can_disable_fibers - parameters: - fibers: - type: boolean - default: true - -set_fibers_env: &set_fibers_env - name: "Disable Fibers" - command: | - if [ "<< parameters.fibers >>" == "false" ]; then - echo "Disabling Fibers" - echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV" - source "$BASH_ENV" - fi - - -# Run tests with Fibers and then without. -matrix_for_fibers: &matrix_for_fibers - matrix: - parameters: - # If we want to run with Fibers and without, just append false here. - fibers: [true] - - jobs: Get Ready: <<: *build_machine_environment @@ -191,7 +167,6 @@ jobs: path: /tmp/memuse.txt Isolated Tests: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -200,7 +175,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -235,7 +209,6 @@ jobs: path: /tmp/memuse.txt Test Group 0: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -244,7 +217,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -277,7 +249,6 @@ jobs: path: /tmp/memuse.txt Test Group 1: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -286,7 +257,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -319,7 +289,6 @@ jobs: path: /tmp/memuse.txt Test Group 2: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -328,7 +297,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -361,7 +329,6 @@ jobs: path: /tmp/memuse.txt Test Group 3: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -370,7 +337,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -403,7 +369,6 @@ jobs: path: /tmp/memuse.txt Test Group 4: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -412,7 +377,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -445,7 +409,6 @@ jobs: path: /tmp/memuse.txt Test Group 5: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -454,7 +417,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -487,7 +449,6 @@ jobs: path: /tmp/memuse.txt Test Group 6: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -496,7 +457,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -529,7 +489,6 @@ jobs: path: /tmp/memuse.txt Test Group 7: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -538,7 +497,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -571,7 +529,6 @@ jobs: path: /tmp/memuse.txt Test Group 8: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -580,7 +537,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -613,7 +569,6 @@ jobs: path: /tmp/memuse.txt Test Group 9: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -622,7 +577,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -655,7 +609,6 @@ jobs: path: /tmp/memuse.txt Test Group 10: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -664,7 +617,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -775,7 +727,6 @@ jobs: npm test Clean Up: - <<: *can_disable_fibers <<: *build_machine_environment steps: - attach_workspace: @@ -858,58 +809,45 @@ workflows: - Docs - Get Ready - Isolated Tests: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 0: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 1: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 2: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 3: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 4: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 5: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 6: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 7: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 8: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 9: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 10: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 11: requires: - Get Ready - Clean Up: - <<: *matrix_for_fibers requires: - Isolated Tests - Test Group 0 diff --git a/.travis.yml b/.travis.yml index 35e4e9f859..2d4a4a74d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,17 +8,13 @@ cache: - ".meteor" - ".babel-cache" script: + - export phantom=false + # to skip Downloading Chromium on every run + # https://github.com/dfernandez79/puppeteer/blob/main/README.md#q-chromium-gets-downloaded-on-every-npm-ci-run-how-can-i-cache-the-download + - export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - travis_retry ./packages/test-in-console/run.sh env: - global: - - CXX=g++-4.8 - - phantom=false - - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - jobs: - # We don't want to run the tests without fibers anymore. - # - DISABLE_FIBERS=1 - # Use a different flag, since node would use false as a string. - - FIBERS_ENABLED=1 + - CXX=g++-4.8 addons: apt: sources: diff --git a/docs/history.md b/docs/history.md index 346edbfca1..d8e5806060 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,104 +1,3 @@ -## 2.9, 2022-XX-XX - -### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) -* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) -* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) -* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) -* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) -* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) -* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) -* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) -* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) -* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) -* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) -* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) -* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) - - -#### Breaking Changes - -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` - - -#### Migration Steps - -#### Meteor Version Release - -* `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel -* `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel -* `accounts-base@2.2.6` - - Moved some functions to accounts-oauth. -* `accounts-oauth@1.4.2` - - Received functions from accounts-base. -* `accounts-password@2.3.2` - - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` -* `babel-compiler@7.10.1` - - Updated babel to 7.17.1. -* `email@2.2.3` - - Create Email.sendAsync method without using Fibers. -* `facebook-oauth@1.11.2` - - Updated facebook-oauth to use async functions. -* `github-oauth@1.4.1` - - Updated github-oauth to use async functions. -* `google-oauth@1.4.3` - - Updated google-oauth to use async functions. -* `meetup-oauth@1.1.2` - - Updated meetup-oauth to use async functions. -* `meteor-developer-oauth@1.3.2` - - Updated meteor-developer-oauth to use async functions. -* `meteor@1.10.3` - - Added Async Local Storage helpers. -* `minifier-css@1.6.2` - - Asyncfied `minifyCss` function. -* `minimongo@1.9.1` - - Implemented Fibers-less MongoDB count methods. -* `mongo@1.16.2` - - Implemented Fibers-less MongoDB count methods. -* `npm-mongo@4.12.1` - - Updated npm-mongo to 4.12. -* `oauth@2.1.3` - - Asyncfied methods. -* `oauth1@1.5.1` - - Asyncfied methods. -* `oauth2@1.3.2` - - Asyncfied methods. -* `package-version-parser@3.2.1` - - Removed underscore. -* `promise@0.12.2` - - Added DISABLE_FIBERS flag. -* `standard-minifier-css@1.8.3` - - Asyncfied minify method. -* `test-helpers@1.3.1` - - added runAndThrowIfNeeded function. -* `test-in-browser@1.3.2` - - Adjusted e[type] to e.type -* `tinytest@1.2.2` - - TinyTest package without Future -* `twitter-oauth@1.3.2` - - Asyncfied methods. -* `typescript@4.6.4` - - updated typescript to 4.6.4. -* `weibo-oauth@1.3.2` - - Asyncfied methods. - -#### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@edimarlnx](https://github.com/edimarlnx) -- [@matheusccastroo](https://github.com/matheusccastroo) -- [@Grubba27](https://github.com/Grubba27) -- [@StorytellerCZ](https://github.com/StorytellerCZ) -- [@radekmie](https://github.com/radekmie) -- [@piotrpospiech](https://github.com/piotrpospiech) -- [@harryadel](https://github.com/harryadel) - -For making this great framework even better! - - ## v2.8.2, 2022-11-29 #### Highlights @@ -116,6 +15,9 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) @@ -124,7 +26,6 @@ N/A For making this great framework even better! - ## 2.8.1, 2022-11-14 #### Highlights @@ -231,7 +132,7 @@ _In case you want types in your app using the core packages types/zodern:types ( * `test-in-browser@1.3.1` - removed underscore. * `tracker@1.2.1` -- added types for package. + - added types for package. * `twitter-oauth@1.3.1` - removed underscore. * `underscore@1.0.11` @@ -240,6 +141,7 @@ _In case you want types in your app using the core packages types/zodern:types ( - added types for package. * `webapp-hashing@1.1.1` - added types for package. + ## v2.8, 2022-10-19 #### Highlights @@ -282,16 +184,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.8-migration.html) for this - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). -* `@meteorjs/babel@7.17.0` - - Upgrade TypeScript to `4.6.4` -* `babel-compiler@7.10.0` - - Upgrade TypeScript to `4.6.4` -* `ecmascript@0.16.3` - - Upgrade TypeScript to `4.6.4` -* `typescript@4.6.4` - - Upgrade TypeScript to `4.6.4` -* `eslint-plugin-meteor@7.4.0` - - Upgrade TypeScript to `4.6.4` + #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 95ef8d6578..77ea6edf24 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -82,28 +82,6 @@ Meteor.call( 'This is a test of Email.send.' ); ``` -{% apibox "Email.sendAsync" %} - -`sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. -If you defined `Email.customTransport`, the `callAsync` method returns the return value from the `customTransport` method or a Promise, if this method is async. - -```js -// Server: Define a method that the client can call. -Meteor.methods({ - sendEmail(to, from, subject, text) { - // Make sure that all arguments are strings. - check([to, from, subject, text], [String]); - - // Let other method calls from the same client start running, without - // waiting for the email sending to complete. - this.unblock(); - - return Email.sendAsync({ to, from, subject, text }).catch(err => { - // - }); - } -}); -``` {% apibox "Email.hookSend" %} diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ebb9381d3a..ae79273d84 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,19 +129,7 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic [Vue 3](https://vuejs.org/) app. - -`--react` - -Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) -for more information. This is the default. - -`--angular` -for more information. - -`--vue-2` - -Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) +Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) for more information. `--svelte` @@ -158,350 +146,43 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [Solid](https://www.solidjs.com/) app. +Create a basic [solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | -| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | - -

meteor generate

- -``meteor generate`` is a command for generating scaffolds for your current project. When ran without arguments, it will ask -you what is the name of the model you want to generate, if you do want methods for your api and publications. It can be -used as a command line only operation as well. - -running -```bash -meteor generate customer - -``` - -It will generate the following code in ``/imports/api`` -![Screenshot 2022-11-09 at 11 28 29](https://user-images.githubusercontent.com/70247653/200856551-71c100f5-8714-4b34-9678-4f08780dcc8b.png) - -That will have the following code: - - -

collection.js

- -```js - - import { Mongo } from 'meteor/mongo'; - -export const CustomerCollection = new Mongo.Collection('customer'); - -``` - - - -

methods.js

- -```js -import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; -import { CustomerCollection } from './collection'; - -export async function create(data) { - return CustomerCollection.insertAsync({ ...data }); -} - -export async function update(_id, data) { - check(_id, String); - return CustomerCollection.updateAsync(_id, { ...data }); -} - -export async function remove(_id) { - check(_id, String); - return CustomerCollection.removeAsync(_id); -} - -export async function findById(_id) { - check(_id, String); - return CustomerCollection.findOneAsync(_id); -} - -Meteor.methods({ - 'Customer.create': create, - 'Customer.update': update, - 'Customer.remove': remove, - 'Customer.find': findById -}); - -``` - - - -

publication.js

- -```js - -import { Meteor } from 'meteor/meteor'; -import { CustomerCollection } from './collection'; - -Meteor.publish('allCustomers', function publishCustomers() { - return CustomerCollection.find({}); -}); - - -``` - - - - -

index.js

- -```js - -export * from './collection'; -export * from './methods'; -export * from './publications'; - -``` - -Also, there is the same version of these methods using TypeScript, that will be shown bellow. - -

path option

- -If you want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. -It will generate the model in that path. Note that is used TypeScript in this example. - -```bash - -meteor generate another-customer --path=server/admin - -``` - -It will generate in ``server/admin`` the another-client code: - -![Screenshot 2022-11-09 at 11 32 39](https://user-images.githubusercontent.com/70247653/200857560-a4874e4c-1078-4b7a-9381-4c6590d2f63b.png) - - -

collection.ts

- -```typescript - -import { Mongo } from 'meteor/mongo'; - -export type AnotherCustomer = { - _id?: string; - name: string; - createdAt: Date; -} - -export const AnotherCustomerCollection = new Mongo.Collection('another-customer'); - -``` - -

methods.ts

- -```typescript - -import { Meteor } from 'meteor/meteor'; -import { Mongo } from 'meteor/mongo'; -import { check } from 'meteor/check'; -import { AnotherCustomer, AnotherCustomerCollection } from './collection'; - -export async function create(data: AnotherCustomer) { - return AnotherCustomerCollection.insertAsync({ ...data }); -} - -export async function update(_id: string, data: Mongo.Modifier) { - check(_id, String); - return AnotherCustomerCollection.updateAsync(_id, { ...data }); -} - -export async function remove(_id: string) { - check(_id, String); - return AnotherCustomerCollection.removeAsync(_id); -} - -export async function findById(_id: string) { - check(_id, String); - return AnotherCustomerCollection.findOneAsync(_id); -} - -Meteor.methods({ - 'AnotherCustomer.create': create, - 'AnotherCustomer.update': update, - 'AnotherCustomer.remove': remove, - 'AnotherCustomer.find': findById -}); - - -``` - - - -

publications.ts

- -```typescript - -import { Meteor } from 'meteor/meteor'; -import { AnotherCustomerCollection } from './collection'; - -Meteor.publish('allAnotherCustomers', function publishAnotherCustomers() { - return AnotherCustomerCollection.find({}); -}); - -``` - - - -

index.ts

- -```typescript - -export * from './collection'; -export * from './methods'; -export * from './publications'; - -``` - - - ---- - - -

Using the Wizard

- - -If you run the following command: - -```bash -meteor generate -``` - -It will prompt the following questions. - -![Screenshot 2022-11-09 at 11 38 29](https://user-images.githubusercontent.com/70247653/200859087-a2ef63b6-7ac1-492b-8918-0630cbd30686.png) - - - - ---- - -

Using your own template

- -`--templatePath` - -```bash -meteor generate feed --templatePath=/scaffolds-ts -``` -![Screenshot 2022-11-09 at 11 42 47](https://user-images.githubusercontent.com/70247653/200860178-2341befe-bcfd-422f-a4bd-7c9918abfd97.png) - -> Note that this is not a CLI framework inside meteor but just giving some solutions for really common problems out of the box. -> Check out Yargs, Inquirer or Commander for more information about CLI frameworks. - - -You can use your own templates for scaffolding your specific workloads. To do that, you should pass in a template directory URL so that it can copy it with its changes. - -

How to rename things?

- -Out of the box is provided a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` - -these replacements come from this function: - -_Note that scaffoldName is the name that you have passed as argument_ - -```js -const transformName = (name) => { - return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { - if (substring === '$$name$$') return scaffoldName; - if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); - if (substring === '$$camelName$$') return toCamelCase(scaffoldName); - }) - } -``` - -

How to bring your own templates?

- -`--replaceFn` - -There is an option called ``--replaceFn`` that when you pass in given a .js file with two functions it will override all templating that we have defaulted to use your given function. -_example of a replacer file_ -```js -export function transformFilename(scaffoldName, filename) { - console.log(scaffoldName, filename); - return filename -} - -export function transformContents(scaffoldName, contents, fileName) { - console.log(fileName, contents); - return contents -} - -``` -If you run your command like this: - -```bash - meteor generate feed --replaceFn=/fn/replace.js -``` -It will generate files full of ``$$PascalCase$$``using the meteor provided templates. - -A better example of this feature would be the following js file: -```js -const toPascalCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); -} -const toCamelCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); -} - -const transformName = (scaffoldName, str) => { - return str.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { - if (substring === '$$name$$') return scaffoldName; - if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); - if (substring === '$$camelName$$') return toCamelCase(scaffoldName); - }) - -} - -export function transformFilename(scaffoldName, filename) { - return transformName(scaffoldName, filename); -} - -export function transformContents(scaffoldName, contents, fileName) { - return transformName(scaffoldName, contents); -} -``` - - - +| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:| +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | +| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | +| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | +| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | +| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | +| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | +| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | +| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | +| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | +| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | +| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | +| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | +| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | +| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | +| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | +| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | +| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | |

meteor login / logout

@@ -923,8 +604,8 @@ The `meteor node` command calls the [`node`](https://nodejs.org) version bundled with Meteor itself. > This is not to be confused with [`meteor shell`](#meteorshell), which provides -> an almost identical experience but also gives you access to the "server" context -> of a Meteor application. Typically, `meteor shell` will be preferred. +an almost identical experience but also gives you access to the "server" context +of a Meteor application. Typically, `meteor shell` will be preferred. Additional parameters can be passed in the same way as the `node` command, and the [Node.js documentation](https://nodejs.org/dist/latest-v4.x/docs/api/cli.html) diff --git a/guide/_config.yml b/guide/_config.yml index a28b565f8f..7a99eb70f2 100644 --- a/guide/_config.yml +++ b/guide/_config.yml @@ -5,7 +5,6 @@ edit_branch: 'devel' edit_path: 'guide' content_root: 'content' versions: - - '2.9' - '2.8' - '2.7' - '2.6' @@ -38,7 +37,7 @@ sidebar_categories: - index - code-style - structure - - 2.9-migration + - 2.8-migration Data: - collections - data-loading diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md deleted file mode 100644 index 6da327420a..0000000000 --- a/guide/source/2.9-migration.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Migrating to Meteor 2.9 -description: How to migrate your application to Meteor 2.9. ---- - -Meteor `2.9` introduces some changes in the `accounts` packages, the new method `Email.sendAsync`, the new method `Meteor.userAsync`, and more. For a complete breakdown of the changes, please refer to the [changelog](http://docs.meteor.com/changelog.html). - - -

Why is this new API important?

- -You may know that on Meteor we use a package called [Fibers](https://github.com/laverdet/node-fibers). This package is what makes it possible to call an async function inside Meteor in a sync way (without having to wait for the promise to resolve). - -But starting from Node 16, Fibers will stop working, so Meteor needs to move away from Fibers, otherwise, we'll be stuck on Node 14. - -If you want to know more about the plan, you can check this [discussion](https://github.com/meteor/meteor/discussions/11505). - -

Why doing this change now?

- -This will be a considerable change for older Meteor applications, and some parts of the code of any Meteor app will have to be adjusted eventually. So it's important to start the migration process as soon as possible. - -The migration process started in version 2.8. We recommend you [check that out](2.8-migration.htm) first in case you skipped. - -

Can I update to this version without changing my app?

- -Yes. You can update to this version without changing your app. - -

What's new?

- -Let's start with the accounts and OAuth packages. Some methods had to be restructured to work without Fibers in the future. The current methods will continue working as of today, but if you use some of the methods we'll mention below in custom login packages, we recommend you adapt them. - -Internal methods that are now async: - -- **_attemptLogin** -- **_loginMethod** -- **_runLoginHandlers** -- **Accounts._checkPassword**: still works as always, but now has a new version called `Accounts._checkPasswordAsync`. - - -We also have changes to asynchronous context in the registry of handlers for OAuth services. - -Now, the OAuth.Register method accepts an async handler, and it is possible to use the await option internally, avoiding to use methods that run on Fibers, such as **HTTP** (deprecated Meteor package), `Meteor.wrapAsync` and `Promise.await`. - -Before the changes you would have something like: - -```js -OAuth.registerService('github', 2, null, (query) => { - const accessTokenCall = Meteor.wrapAsync(getAccessToken); - const accessToken = accessTokenCall(query); - const identityCall = Meteor.wrapAsync(getIdentity); -… -}); -``` - -Now you have: - -```js -OAuth.registerService('github', 2, null, async (query) => { - const accessToken = await getAccessToken(query); - const identity = await getIdentity(accessToken); - const emails = await getEmails(accessToken); -… -}); -``` - -

New async methods

- -We now have async version of methods that you already use. They are: - -- [Email.sendAsync()](https://github.com/meteor/meteor/pull/12101/files#diff-b2453acdfd34fb563a1e258956d2733ab06a2aa77c87e402cfa53a86a48133a8R86-R107) -- [Meteor.userAsync()](https://github.com/meteor/meteor/pull/12274) -- [CssTools.minifyCssAsync()](https://github.com/meteor/meteor/pull/12105) - -

Accounts-base without service-configuration

- -Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. - -

Migrating from a version older than 2.8?

- -If you're migrating from a version of Meteor older than Meteor 2.8, there may be important considerations not listed in this guide. Please review the older migration guides for details: - -* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7) -* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6) -* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5) -* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4) -* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3) -* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2) -* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0) -* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12) -* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11) -* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2) -* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10) -* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3) -* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9) -* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3) -* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2) -* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8) -* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7) -* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6) -* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5) -* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4) -* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3) -* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2) diff --git a/meteor b/meteor index e1379039a5..0779da7ba2 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.2 +BUNDLE_VERSION=14.21.1.0 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 7845d884a3..6f01831721 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.4.0", + "version": "7.3.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index de71198d42..ddab44b16d 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.6.4", - "@meteorjs/babel": "7.17.1-beta.0", + typescript: "4.5.4", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index dc215572b8..21a9be7dde 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,7 +80,11 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push(require("@babel/preset-react")); + options.presets.push( + [require("@babel/preset-react"), { + runtime: "automatic" + }] + ); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true @@ -185,13 +189,11 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - if (!process.env.DISABLE_FIBERS) { - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); - } + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: false + }]); // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 17c5612fb7..7fec2af89a 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,3875 +1,8 @@ { "name": "@meteorjs/babel", - "version": "7.17.2-beta.0", - "lockfileVersion": 2, + "version": "7.16.0-beta.1", + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@meteorjs/babel", - "version": "7.17.2-beta.0", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-react": "^7.16.7", - "@babel/runtime": "7.17.2", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "@meteorjs/reify": "0.23.0", - "babel-preset-meteor": "^7.10.0", - "babel-preset-minify": "^0.5.1", - "convert-source-map": "^1.6.0", - "lodash": "^4.17.21", - "meteor-babel-helpers": "0.0.3", - "typescript": "~4.6.4" - }, - "devDependencies": { - "@babel/plugin-proposal-decorators": "7.14.5", - "@babel/plugin-syntax-decorators": "7.14.5", - "d3": "4.13.0", - "fibers": "5.0.0", - "meteor-promise": "0.9.0", - "mocha": "6.2.3", - "promise": "8.1.0", - "source-map": "0.6.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", - "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", - "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", - "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", - "dependencies": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@babel/core/node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@babel/core/node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" - }, - "node_modules/@babel/core/node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "node_modules/@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", - "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", - "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", - "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", - "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@meteorjs/reify": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", - "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", - "dependencies": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "magic-string": "^0.25.3", - "periscopic": "^2.0.3", - "semver": "^5.7.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@meteorjs/reify/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "node_modules/babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "node_modules/babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "node_modules/babel-helper-is-nodes-equiv": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" - }, - "node_modules/babel-helper-is-void-0": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" - }, - "node_modules/babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "node_modules/babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "node_modules/babel-helper-to-multiple-sequence-expressions": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", - "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-minify-builtins": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", - "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" - }, - "node_modules/babel-plugin-minify-constant-folding": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", - "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "node_modules/babel-plugin-minify-flip-comparisons": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-infinity": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" - }, - "node_modules/babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", - "dependencies": { - "babel-helper-mark-eval-scopes": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-numeric-literals": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" - }, - "node_modules/babel-plugin-minify-replace": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", - "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" - }, - "node_modules/babel-plugin-minify-simplify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", - "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3", - "babel-helper-is-nodes-equiv": "^0.0.1", - "babel-helper-to-multiple-sequence-expressions": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-type-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-transform-inline-consecutive-adds": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" - }, - "node_modules/babel-plugin-transform-member-expression-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" - }, - "node_modules/babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" - }, - "node_modules/babel-plugin-transform-minify-booleans": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" - }, - "node_modules/babel-plugin-transform-property-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", - "dependencies": { - "esutils": "^2.0.2" - } - }, - "node_modules/babel-plugin-transform-regexp-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" - }, - "node_modules/babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" - }, - "node_modules/babel-plugin-transform-remove-debugger": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" - }, - "node_modules/babel-plugin-transform-remove-undefined": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", - "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-transform-simplify-comparison-operators": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" - }, - "node_modules/babel-plugin-transform-undefined-to-void": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" - }, - "node_modules/babel-preset-meteor": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", - "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", - "dependencies": { - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.13.16", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13" - } - }, - "node_modules/babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", - "dependencies": { - "babel-plugin-minify-builtins": "^0.5.0", - "babel-plugin-minify-constant-folding": "^0.5.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-flip-comparisons": "^0.4.3", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-minify-infinity": "^0.4.3", - "babel-plugin-minify-mangle-names": "^0.5.0", - "babel-plugin-minify-numeric-literals": "^0.4.3", - "babel-plugin-minify-replace": "^0.5.0", - "babel-plugin-minify-simplify": "^0.5.1", - "babel-plugin-minify-type-constructors": "^0.4.3", - "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", - "babel-plugin-transform-member-expression-literals": "^6.9.4", - "babel-plugin-transform-merge-sibling-variables": "^6.9.4", - "babel-plugin-transform-minify-booleans": "^6.9.4", - "babel-plugin-transform-property-literals": "^6.9.4", - "babel-plugin-transform-regexp-constructors": "^0.4.3", - "babel-plugin-transform-remove-console": "^6.9.4", - "babel-plugin-transform-remove-debugger": "^6.9.4", - "babel-plugin-transform-remove-undefined": "^0.5.0", - "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", - "babel-plugin-transform-undefined-to-void": "^6.9.4", - "lodash": "^4.17.11" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001248", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", - "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-js-compat": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", - "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/core-js-compat/node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/core-js-compat/node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" - }, - "node_modules/core-js-compat/node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/d3": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", - "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", - "dev": true, - "dependencies": { - "d3-array": "1.2.1", - "d3-axis": "1.0.8", - "d3-brush": "1.0.4", - "d3-chord": "1.0.4", - "d3-collection": "1.0.4", - "d3-color": "1.0.3", - "d3-dispatch": "1.0.3", - "d3-drag": "1.2.1", - "d3-dsv": "1.0.8", - "d3-ease": "1.0.3", - "d3-force": "1.1.0", - "d3-format": "1.2.2", - "d3-geo": "1.9.1", - "d3-hierarchy": "1.1.5", - "d3-interpolate": "1.1.6", - "d3-path": "1.0.5", - "d3-polygon": "1.0.3", - "d3-quadtree": "1.0.3", - "d3-queue": "3.0.7", - "d3-random": "1.1.0", - "d3-request": "1.0.6", - "d3-scale": "1.0.7", - "d3-selection": "1.3.0", - "d3-shape": "1.2.0", - "d3-time": "1.0.8", - "d3-time-format": "2.1.1", - "d3-timer": "1.0.7", - "d3-transition": "1.1.1", - "d3-voronoi": "1.1.2", - "d3-zoom": "1.7.1" - } - }, - "node_modules/d3-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", - "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", - "dev": true - }, - "node_modules/d3-axis": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", - "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", - "dev": true - }, - "node_modules/d3-brush": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", - "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/d3-chord": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", - "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", - "dev": true, - "dependencies": { - "d3-array": "1", - "d3-path": "1" - } - }, - "node_modules/d3-collection": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", - "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", - "dev": true - }, - "node_modules/d3-color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", - "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", - "dev": true - }, - "node_modules/d3-dispatch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", - "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", - "dev": true - }, - "node_modules/d3-drag": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", - "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "node_modules/d3-dsv": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", - "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", - "dev": true, - "dependencies": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json", - "csv2tsv": "bin/dsv2dsv", - "dsv2dsv": "bin/dsv2dsv", - "dsv2json": "bin/dsv2json", - "json2csv": "bin/json2dsv", - "json2dsv": "bin/json2dsv", - "json2tsv": "bin/json2dsv", - "tsv2csv": "bin/dsv2dsv", - "tsv2json": "bin/dsv2json" - } - }, - "node_modules/d3-ease": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", - "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", - "dev": true - }, - "node_modules/d3-force": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", - "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", - "dev": true, - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "node_modules/d3-format": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", - "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", - "dev": true - }, - "node_modules/d3-geo": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", - "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", - "dev": true, - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-hierarchy": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", - "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", - "dev": true - }, - "node_modules/d3-interpolate": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", - "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", - "dev": true, - "dependencies": { - "d3-color": "1" - } - }, - "node_modules/d3-path": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", - "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", - "dev": true - }, - "node_modules/d3-polygon": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", - "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", - "dev": true - }, - "node_modules/d3-quadtree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", - "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", - "dev": true - }, - "node_modules/d3-queue": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", - "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", - "dev": true - }, - "node_modules/d3-random": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", - "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", - "dev": true - }, - "node_modules/d3-request": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", - "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", - "dev": true, - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-dsv": "1", - "xmlhttprequest": "1" - } - }, - "node_modules/d3-scale": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", - "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", - "dev": true, - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-color": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "node_modules/d3-selection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", - "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", - "dev": true - }, - "node_modules/d3-shape": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", - "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", - "dev": true, - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-time": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", - "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", - "dev": true - }, - "node_modules/d3-time-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", - "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", - "dev": true, - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/d3-timer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", - "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", - "dev": true - }, - "node_modules/d3-transition": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", - "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", - "dev": true, - "dependencies": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", - "dev": true - }, - "node_modules/d3-zoom": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", - "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.793", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", - "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fibers": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", - "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/meteor-babel-helpers": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" - }, - "node_modules/meteor-promise": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", - "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/periscopic": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", - "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", - "dependencies": { - "estree-walker": "^2.0.2", - "is-reference": "^1.1.4" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -4940,8 +1073,7 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "requires": {} + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" }, "ansi-colors": { "version": "3.2.3", @@ -6590,9 +2722,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" }, "unbox-primitive": { "version": "1.0.1", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 6733ac41b8..c5c361f366 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.2-beta.0", + "version": "7.16.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -37,7 +37,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-react": "^7.16.7", - "@babel/runtime": "7.17.2", + "@babel/runtime": "^7.17.2", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0", @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "~4.6.4" + "typescript": "^4.5.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/npm-packages/meteor-babel/runtime.js b/npm-packages/meteor-babel/runtime.js index c7fe580b3f..43b5c85c85 100644 --- a/npm-packages/meteor-babel/runtime.js +++ b/npm-packages/meteor-babel/runtime.js @@ -11,21 +11,19 @@ Module.prototype.resolve = function (id) { require("@meteorjs/reify/lib/runtime").enable(Module.prototype); -if (!process.env.DISABLE_FIBERS) { - require("meteor-promise").makeCompatible( - global.Promise = global.Promise || - require("promise/lib/es6-extensions"), - require("fibers") - ); +require("meteor-promise").makeCompatible( + global.Promise = global.Promise || + require("promise/lib/es6-extensions"), + require("fibers") +); // If Promise.asyncApply is defined, use it to wrap calls to // regeneratorRuntime.async so that the entire async function will run in // its own Fiber, not just the code that comes after the first await. - if (typeof Promise.asyncApply === "function") { - var regeneratorRuntime = require("@babel/runtime/regenerator"); - var realAsync = regeneratorRuntime.async; - regeneratorRuntime.async = function (innerFn) { - return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); - }; - } +if (typeof Promise.asyncApply === "function") { + var regeneratorRuntime = require("@babel/runtime/regenerator"); + var realAsync = regeneratorRuntime.async; + regeneratorRuntime.async = function (innerFn) { + return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); + }; } diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index fcae57bcec..676cf07665 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.9.0'; +const METEOR_LATEST_VERSION = '2.8.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 53d344ef33..8afbd9c39e 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.9.0", + "version": "2.8.2", "description": "Install Meteor", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index 842e927ad9..cfded81faa 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,11 +798,6 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); - // TODO: the code above needs to be changed to Meteor.userAsync() when we have - // a way to make it reactive using async. - // Template.registerHelper('currentUserAsync', - // async () => await Meteor.userAsync()); - /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 880a71e4fe..9ebb7d4b9f 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,20 +94,6 @@ Tinytest.addAsync( } ); -Tinytest.addAsync( - 'accounts async - Meteor.loggingIn() is false after login has completed', - (test, done) => { - logoutAndCreateUser(test, done, () => { - // Login then verify loggingIn is false after login has completed - Meteor.loginWithPassword(username, password, async () => { - test.isFalse(Meteor.loggingIn()); - test.isTrue(await Meteor.userAsync()); - removeTestUser(done); - }); - }); - } -); - Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -164,7 +150,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user() obeys explicit and default field selectors', + 'accounts - Meteor.user obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -192,38 +178,6 @@ Tinytest.addAsync( } ); -Tinytest.addAsync( - 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', - (test, done) => { - logoutAndCreateUser(test, done, () => { - Meteor.loginWithPassword(username, password, async () => { - // by default, all fields should be returned - let user; - user = await Meteor.userAsync(); - test.equal(user.profile[excludeField], excludeValue); - - // this time we want to exclude the default fields - const options = Accounts._options; - Accounts._options = {}; - Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); - - user = await Meteor.userAsync(); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile[excludeField], excludeValue); - test.equal(user.profile.name, username); - - // this time we only want certain fields... - - user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); - test.isUndefined(user.profile[excludeField]); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile.name, username); - Accounts._options = options; - removeTestUser(done); - }); - }); - } -); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index edca3cd31b..b94e927a2d 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,6 +79,40 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; + + // loginServiceConfiguration and ConfigError are maintained for backwards compatibility + Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + this.loginServiceConfiguration = ServiceConfiguration.configurations; + this.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + 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 configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + this._options[key] = settings[key]; + } + }); + } + }); } /** @@ -136,18 +170,6 @@ export class AccountsCommon { : null; } - /** - * @summary Get the current user record, or `null` if no user is logged in. - * @locus Anywhere - * @param {Object} [options] - * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. - */ - async userAsync(options) { - const userId = this.userId(); - return userId - ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) - : null; - } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -242,7 +264,6 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { 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}`); } }); @@ -397,15 +418,6 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); -/** - * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. - * @locus Anywhere but publish functions - * @importFromPackage meteor - * @param {Object} [options] - * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. - */ -Meteor.userAsync = options => Accounts.userAsync(options); - // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires @@ -418,6 +430,9 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes +// how long we wait before logging out clients when Meteor.logoutOtherClients is +// called +export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 2fd0a6d41b..f677baa34c 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,5 +1,4 @@ import crypto from 'crypto'; -import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -435,7 +434,7 @@ export class AccountsServer extends AccountsCommon { // If the login is allowed and isn't aborted by a validate login hook // callback, log in the user. // - async _attemptLogin( + _attemptLogin( methodInvocation, methodName, methodArgs, @@ -495,18 +494,18 @@ export class AccountsServer extends AccountsCommon { // Ensure that thrown exceptions are caught and that login hook // callbacks are still called. // - async _loginMethod( + _loginMethod( methodInvocation, methodName, methodArgs, type, fn ) { - return await this._attemptLogin( + return this._attemptLogin( methodInvocation, methodName, methodArgs, - await tryLoginMethod(type, fn) + tryLoginMethod(type, fn) ); }; @@ -583,10 +582,11 @@ export class AccountsServer extends AccountsCommon { // Try all of the registered login handlers until one of them doesn't // return `undefined`, meaning it handled this call to `login`. Return // that return value. - async _runLoginHandlers(methodInvocation, options) { + _runLoginHandlers(methodInvocation, options) { for (let handler of this._loginHandlers) { - const result = await tryLoginMethod(handler.name, async () => - await handler.handler.call(methodInvocation, options) + const result = tryLoginMethod( + handler.name, + () => handler.handler.call(methodInvocation, options) ); if (result) { @@ -594,10 +594,7 @@ export class AccountsServer extends AccountsCommon { } if (result !== undefined) { - throw new Meteor.Error( - 400, - 'A login handler should return a result or undefined' - ); + throw new Meteor.Error(400, "A login handler should return a result or undefined"); } } @@ -642,15 +639,14 @@ export class AccountsServer extends AccountsCommon { // If successful, returns {token: reconnectToken, id: userId} // If unsuccessful (for example, if the user closed the oauth login popup), // throws an error describing the reason - methods.login = async function (options) { + methods.login = function (options) { // Login handlers should really also check whatever field they look at in // options, but we don't enforce it. check(options, Object); - const result = await accounts._runLoginHandlers(this, options); - //console.log({result}); + const result = accounts._runLoginHandlers(this, options); - return await accounts._attemptLogin(this, "login", arguments, result); + return accounts._attemptLogin(this, "login", arguments, result); }; methods.logout = function () { @@ -725,19 +721,14 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - if (Package['service-configuration']) { - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (Package["oauth-encryption"]) { - const { OAuthEncryption } = Package["oauth-encryption"] - if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) - options.secret = OAuthEncryption.seal(options.secret); - } + if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) + options.secret = OAuthEncryption.seal(options.secret); - ServiceConfiguration.configurations.insert(options); - } + ServiceConfiguration.configurations.insert(options); }; accounts._server.methods(methods); @@ -762,10 +753,8 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - if (Package['service-configuration']) { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); - } + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1518,10 +1507,10 @@ const cloneAttemptWithConnection = (connection, attempt) => { return clonedAttempt; }; -const tryLoginMethod = async (type, fn) => { +const tryLoginMethod = (type, fn) => { let result; try { - result = await fn(); + result = fn(); } catch (e) { result = {error: e}; @@ -1690,7 +1679,17 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = + Package["oauth-encryption"] && + Package["oauth-encryption"].OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption && OAuthEncryption.keyIsLoaded(); +}; // OAuth service data is temporarily stored in the pending credentials // collection during the oauth authentication process. Sensitive data @@ -1702,12 +1701,44 @@ const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; const pinEncryptedFieldsToUser = (serviceData, userId) => { Object.keys(serviceData).forEach(key => { let value = serviceData[key]; - if (OAuthEncryption?.isSealed(value)) + if (OAuthEncryption && OAuthEncryption.isSealed(value)) value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); serviceData[key] = value; }); }; + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); + // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 797bd758f0..de870e0f81 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,62 +604,6 @@ Tinytest.add( } ); - -Tinytest.addAsync( - 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', - async test => { - const ignoreFieldName = "bigArray"; - const customField = "customField"; - const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); - const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); - const options = Accounts._options; - - // stub Meteor.userId() so it works outside methods and returns the correct user: - const origAccountsUserId = Accounts.userId; - Accounts.userId = () => userId; - - Accounts._options = {}; - - // test the field is included by default - let user = await Meteor.userAsync(); - test.isNotUndefined(user[ignoreFieldName], 'included by default'); - - // test the field is excluded - Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); - user = await Meteor.userAsync(); - test.isUndefined(user[ignoreFieldName], 'excluded'); - user = await Meteor.userAsync({}); - test.isUndefined(user[ignoreFieldName], 'excluded {}'); - - // test the field can still be retrieved if required - user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); - test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); - test.isUndefined(user.username, 'field can be retrieved username'); - - // test a combined negative field specifier - user = await Meteor.userAsync({ fields: { username: 0 } }); - test.isUndefined(user[ignoreFieldName], 'combined field selector'); - test.isUndefined(user.username, 'combined field selector username'); - - // test an explicit request for the full user object - user = await Meteor.userAsync({ fields: {} }); - test.isNotUndefined(user[ignoreFieldName], 'full selector'); - test.isNotUndefined(user.username, 'full selector username'); - - Accounts._options = {}; - - // Test that a custom field gets retrieved properly - Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); - user = await Meteor.userAsync(); - test.isNotUndefined(user[customField]); - test.isUndefined(user.username); - test.isUndefined(user[ignoreFieldName]); - - Accounts._options = options; - Accounts.userId = origAccountsUserId; - } -); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 61a19fd4ba..90f03e6b50 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6', + version: '2.2.5', }); Package.onUse(api => { @@ -15,6 +15,10 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index bfb99b0a5d..e0e1a1ad48 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,24 +1,3 @@ -import { Meteor } from 'meteor/meteor'; - -// TODO get from account-base -// config option keys -const VALID_CONFIG_KEYS = [ - 'sendVerificationEmail', - 'forbidClientAccountCreation', - 'passwordEnrollTokenExpiration', - 'passwordEnrollTokenExpirationInDays', - 'restrictCreationByEmailDomain', - 'loginExpirationInDays', - 'loginExpiration', - 'passwordResetTokenExpirationInDays', - 'passwordResetTokenExpiration', - 'ambiguousErrorMessages', - 'bcryptRounds', - 'defaultFieldSelector', - 'loginTokenExpirationHours', - 'tokenSequenceLength', -]; - Accounts.oauth = {}; const services = {}; @@ -52,37 +31,3 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); - -// loginServiceConfiguration and ConfigError are maintained for backwards compatibility -Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; - Accounts.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - 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 configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - Accounts._options[key] = settings[key]; - } - }); - } -}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index f8d67eff25..c76b2e439b 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,5 +1,3 @@ -import { Meteor } from 'meteor/meteor'; - // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -57,44 +55,3 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); - -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption?.keyIsLoaded(); -}; - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index d26a1ff571..f20513769d 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2", + version: "1.4.1", }); Package.onUse(api => { @@ -9,11 +9,6 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); - - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - api.use('oauth'); api.addFiles('oauth_common.js'); diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 719191d8dc..c4f9cadbd3 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2', + version: '2.3.1', }); Npm.depends({ diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 30d3b49450..5d1279782b 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,10 +7,12 @@ const reportError = (error, callback) => { } }; + const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; + Accounts.callLoginMethod({ methodArguments: [ { diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index c44be77f66..ea1236313c 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,5 +1,8 @@ -import { hash as bcryptHash, compare as bcryptCompare } from 'bcrypt'; -import { Accounts } from "meteor/accounts-base"; +import bcrypt from 'bcrypt' +import {Accounts} from "meteor/accounts-base"; + +const bcryptHash = Meteor.wrapAsync(bcrypt.hash); +const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); // Utility for grabbing user const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); @@ -45,9 +48,9 @@ const getPasswordString = password => { // SHA256 before bcrypt) or an object with properties `digest` and // `algorithm` (in which case we bcrypt `password.digest`). // -const hashPassword = async password => { +const hashPassword = password => { password = getPasswordString(password); - return await bcryptHash(password, Accounts._bcryptRounds()); + return bcryptHash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -71,7 +74,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -const checkPasswordAsync = async (user, password) => { +Accounts._checkPassword = (user, password) => { const result = { userId: user._id }; @@ -80,16 +83,15 @@ const checkPasswordAsync = async (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! await bcryptCompare(formattedPassword, hash)) { + if (! bcryptCompare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. - - Meteor.defer(async () => { + Meteor.defer(() => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - await bcryptHash(formattedPassword, Accounts._bcryptRounds()) + bcryptHash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -97,13 +99,7 @@ const checkPasswordAsync = async (user, password) => { return result; }; - -const checkPassword = (user, password) => { - return Promise.await(checkPasswordAsync(user, password)); -}; - -Accounts._checkPassword = checkPassword; -Accounts._checkPasswordAsync = checkPasswordAsync; +const checkPassword = Accounts._checkPassword; /// /// LOGIN @@ -167,7 +163,7 @@ const passwordValidator = Match.OneOf( // // Note that neither password option is secure without SSL. // -Accounts.registerLoginHandler("password", async options => { +Accounts.registerLoginHandler("password", options => { if (!options.password) return undefined; // don't handle @@ -192,7 +188,7 @@ Accounts.registerLoginHandler("password", async options => { Accounts._handleError("User has no password set"); } - const result = await checkPasswordAsync(user, options.password); + const result = checkPassword(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -262,7 +258,7 @@ Accounts.setUsername = (userId, newUsername) => { // Let the user change their own password if they know the old // password. `oldPassword` and `newPassword` should be objects with keys // `digest` and `algorithm` (representing the SHA256 of the password). -Meteor.methods({changePassword: async function (oldPassword, newPassword) { +Meteor.methods({changePassword: function (oldPassword, newPassword) { check(oldPassword, passwordValidator); check(newPassword, passwordValidator); @@ -282,12 +278,12 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = await checkPasswordAsync(user, oldPassword); + const result = checkPassword(user, oldPassword); if (result.error) { throw result.error; } - const hashed = await hashPassword(newPassword); + const hashed = hashPassword(newPassword); // It would be better if this removed ALL existing tokens and replaced // the token for the current connection with a new one, but that would @@ -320,10 +316,10 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { * @param {Object} options.logout Logout all current connections with this userId (default: true) * @importFromPackage accounts-base */ -Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { - check(userId, String); - check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); - check(options, Match.Maybe({ logout: Boolean })); +Accounts.setPassword = (userId, newPlaintextPassword, options) => { + check(userId, String) + check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)) + check(options, Match.Maybe({ logout: Boolean })) options = { logout: true , ...options }; const user = getUserById(userId, {fields: {_id: 1}}); @@ -335,7 +331,7 @@ Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { $unset: { 'services.password.reset': 1 }, - $set: {'services.password.bcrypt': await hashPassword(newPlaintextPassword)} + $set: {'services.password.bcrypt': hashPassword(newPlaintextPassword)} }; if (options.logout) { @@ -345,19 +341,6 @@ Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { Meteor.users.update({_id: user._id}, update); }; -/** - * @summary Forcibly change the password for a user. - * @locus Server - * @param {String} userId The id of the user to update. - * @param {String} newPassword A new password for the user. - * @param {Object} [options] - * @param {Object} options.logout Logout all current connections with this userId (default: true) - * @importFromPackage accounts-base - */ -Accounts.setPassword = (userId, newPlaintextPassword, options) => { - return Promise.await(Accounts.setPasswordAsync(userId, newPlaintextPassword, options)); -}; - /// /// RESETTING VIA EMAIL @@ -577,15 +560,15 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData, extraParams) => { // Take token from sendResetPasswordEmail or sendEnrollmentEmail, change // the users password, and log them in. -Meteor.methods({resetPassword: async function (...args) { +Meteor.methods({resetPassword: function (...args) { const token = args[0]; const newPassword = args[1]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "resetPassword", args, "password", - async () => { + () => { check(token, String); check(newPassword, passwordValidator); @@ -634,7 +617,7 @@ Meteor.methods({resetPassword: async function (...args) { error: new Meteor.Error(403, "Token has invalid email address") }; - const hashed = await hashPassword(newPassword); + const hashed = hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be // logged in as. Make sure to avoid logging ourselves out if this @@ -729,9 +712,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData, extraParams) => // Take token from sendVerificationEmail, mark the email as verified, // and log them in. -Meteor.methods({verifyEmail: async function (...args) { +Meteor.methods({verifyEmail: function (...args) { const token = args[0]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "verifyEmail", args, @@ -905,7 +888,7 @@ Accounts.removeEmail = (userId, email) => { // does the actual user insertion. // // returns the user id -const createUser = async options => { +const createUser = options => { // Unknown keys allowed, because a onCreateUserHook can take arbitrary // options. check(options, Match.ObjectIncluding({ @@ -920,22 +903,22 @@ const createUser = async options => { const user = {services: {}}; if (password) { - const hashed = await hashPassword(password); + const hashed = hashPassword(password); user.services.password = { bcrypt: hashed }; } - return Accounts._createUserCheckingDuplicates({ user, email, username, options }); + return Accounts._createUserCheckingDuplicates({ user, email, username, options }) }; // method for create user. Requests come from the client. -Meteor.methods({createUser: async function (...args) { +Meteor.methods({createUser: function (...args) { const options = args[0]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "createUser", args, "password", - async () => { + () => { // createUser() above does more checking. check(options, Object); if (Accounts._options.forbidClientAccountCreation) @@ -943,7 +926,7 @@ Meteor.methods({createUser: async function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - const userId = await Accounts.createUserVerifyingEmail(options); + const userId = Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -965,10 +948,10 @@ Meteor.methods({createUser: async function (...args) { * @param {Object} options.profile The user's profile, typically including the `name` field. * @importFromPackage accounts-base * */ -Accounts.createUserVerifyingEmail = async (options) => { +Accounts.createUserVerifyingEmail = (options) => { options = { ...options }; // Create user. result contains id and token. - const userId = await createUser(options); + const userId = createUser(options); // safety belt. createUser is supposed to throw on error. send 500 error // instead of sending a verification email with empty userid. if (! userId) @@ -993,15 +976,14 @@ Accounts.createUserVerifyingEmail = async (options) => { // Unlike the client version, this does not log you in as this user // after creation. // -// returns Promise or throws an error if it can't create +// returns userId or throws an error if it can't create // // XXX add another argument ("server options") that gets sent to onCreateUser, // which is always empty when called from the createUser method? eg, "admin: // true", which we want to prevent the client from setting, but which a custom // method calling Accounts.createUser could set? // - -Accounts.createUserAsync = async (options, callback) => { +Accounts.createUser = (options, callback) => { options = { ...options }; // XXX allow an optional callback? @@ -1012,23 +994,6 @@ Accounts.createUserAsync = async (options, callback) => { return createUser(options); }; -// Create user directly on the server. -// -// Unlike the client version, this does not log you in as this user -// after creation. -// -// returns userId or throws an error if it can't create -// -// XXX add another argument ("server options") that gets sent to onCreateUser, -// which is always empty when called from the createUser method? eg, "admin: -// true", which we want to prevent the client from setting, but which a custom -// method calling Accounts.createUser could set? -// - -Accounts.createUser = (options, callback) => { - return Promise.await(Accounts.createUserAsync(options, callback)); -}; - /// /// PASSWORD-SPECIFIC INDEXES ON USERS /// diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 0266c977f2..23e7e6ca8c 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1747,7 +1747,7 @@ if (Meteor.isServer) (() => { Tinytest.addAsync( 'passwords - allow custom bcrypt rounds', - async (test, done) => { + (test, done) => { const getUserHashRounds = user => Number(user.services.password.bcrypt.substring(4, 6)); @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - await Accounts._checkPasswordAsync(user1, password); + Accounts._checkPassword(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..4453e83e92 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,213 +2,206 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" }, "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dependencies": { "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" } } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" - } - } + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" }, "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" }, "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -226,9 +219,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -256,139 +249,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", - "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" }, "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" }, "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" }, "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" }, "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" }, "@babel/plugin-transform-parameters": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", - "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" }, "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" }, "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" }, "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" }, "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" }, "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" }, "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" }, "@babel/runtime": { "version": "7.17.2", @@ -396,49 +389,39 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.16.0-beta.1", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", + "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -453,9 +436,9 @@ } }, "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "acorn": { "version": "6.4.2", @@ -480,33 +463,38 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -518,14 +506,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", - "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -535,17 +523,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", - "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -560,62 +548,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", - "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -625,12 +613,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" }, "babel-preset-meteor": { "version": "7.10.0", @@ -638,19 +626,24 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", - "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", + "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" }, "caniuse-lite": { - "version": "1.0.30001436", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", - "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" }, "chalk": { "version": "2.4.2", @@ -665,27 +658,39 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" }, "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" }, "escalade": { "version": "3.1.1", @@ -695,7 +700,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "estree-walker": { "version": "2.0.2", @@ -717,6 +722,11 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -730,12 +740,17 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" }, "is-reference": { "version": "1.2.1", @@ -765,22 +780,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "ms": { "version": "2.1.2", @@ -788,9 +803,19 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" }, "path-parse": { "version": "1.0.7", @@ -813,52 +838,62 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" }, "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" }, "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" }, "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -877,12 +912,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -895,19 +930,14 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" } } } diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index a3ecdbed82..be0b0b6110 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1' + version: '7.9.0' }); Npm.depends({ - '@meteorjs/babel': '7.17.2-beta.0', + '@meteorjs/babel': '7.16.1-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index a43b8dec7e..adb2b73436 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/email.js b/packages/email/email.js index eed8dbd9b3..3f64e23692 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Log } from 'meteor/logging'; import { Hook } from 'meteor/callback-hook'; +import Future from 'fibers/future'; import url from 'url'; import nodemailer from 'nodemailer'; import wellKnow from 'nodemailer/lib/well-known'; @@ -24,7 +25,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function (mailUrlString) { +const makeTransport = function(mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -59,7 +60,7 @@ const makeTransport = function (mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function (settings = undefined, url = undefined) { +const knownHostsTransport = function(settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -109,7 +110,7 @@ const knownHostsTransport = function (settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function () { +const getTransport = function() { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -137,40 +138,40 @@ const getTransport = function () { }; let nextDevModeMailId = 0; - -EmailTest._getAndIncNextDevModeMailId = function () { - return nextDevModeMailId++; -}; +let output_stream = process.stdout; // Testing hooks -EmailTest.resetNextDevModeMailId = function () { +EmailTest.overrideOutputStream = function(stream) { nextDevModeMailId = 0; + output_stream = stream; }; -const devModeSendAsync = function (mail, options) { - const stream = options?.stream || process.stdout; - return new Promise((resolve, reject) => { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); +EmailTest.restoreOutputStream = function() { + output_stream = process.stdout; +}; - // This approach does not prevent other writers to stdout from interleaving. - const output = ['====== BEGIN MAIL #' + devModeMailId + ' ======\n']; - output.push( - '(Mail not sent; to enable sending, set the MAIL_URL ' + +const devModeSend = function(mail) { + let devModeMailId = nextDevModeMailId++; + + const stream = output_stream; + + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.on('data', buffer => { - output.push(buffer.toString()); - }); - readStream.on('end', function () { - output.push('====== END MAIL #' + devModeMailId + ' ======\n'); - stream.write(output.join(''), () => resolve()); - }); - readStream.on('error', (err) => reject(err)); + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + const future = new Future(); + readStream.on('end', function() { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + future.return(); }); + future.wait(); }; -const smtpSend = function (transport, mail) { +const smtpSend = function(transport, mail) { transport._syncSendMail(mail); }; @@ -185,7 +186,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function (f) { +Email.hookSend = function(f) { return sendHooks.register(f); }; @@ -230,75 +231,23 @@ Email.customTransport = undefined; * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function (options) { - if (Email.customTransport) { - // Preserve current behavior - const email = options.mailComposer ? options.mailComposer.mail : options; - let send = true; - sendHooks.forEach((hook) => { - send = hook(email); - return send; - }); - if (!send) { - return; - } - const packageSettings = Meteor.settings.packages?.email || {}; - Email.customTransport({ packageSettings, ...email }); - return; +Email.send = function(options) { + if (options.mailComposer) { + options = options.mailComposer.mail; } - // Using Fibers Promise.await - return Promise.await(Email.sendAsync(options)); -}; - -/** - * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server - * or if mail server returns an error. All fields should match - * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. - * - * If the `MAIL_URL` environment variable is set, actually sends the email. - * Otherwise, prints the contents of the email to standard out. - * - * Note that this package is based on **nodemailer**, so make sure to refer to - * [the documentation](http://nodemailer.com/) - * when using the `attachments` or `mailComposer` options. - * - * @locus Server - * @return {Promise} - * @param {Object} options - * @param {String} [options.from] "From:" address (required) - * @param {String|String[]} options.to,cc,bcc,replyTo - * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses - * @param {String} [options.inReplyTo] Message-ID this message is replying to - * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to - * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value - * @param {String} [options.subject] "Subject:" line - * @param {String} [options.text|html] Mail body (in plain text and/or HTML) - * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch - * @param {String} [options.icalEvent] iCalendar event attachment - * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. - * @param {Object[]} [options.attachments] Array of attachment objects, as - * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). - * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * object representing the message to be sent. Overrides all other options. - * You can create a `MailComposer` object via - * `new EmailInternals.NpmModules.mailcomposer.module`. - */ -Email.sendAsync = async function (options) { - - const email = options.mailComposer ? options.mailComposer.mail : options; let send = true; - sendHooks.forEach((hook) => { - send = hook(email); + sendHooks.forEach(hook => { + send = hook(options); return send; }); - if (!send) { - return; - } + if (!send) return; - if (Email.customTransport) { + const customTransport = Email.customTransport; + if (customTransport) { const packageSettings = Meteor.settings.packages?.email || {}; - return Email.customTransport({ packageSettings, ...email }); + customTransport({ packageSettings, ...options }); + return; } const mailUrlEnv = process.env.MAIL_URL; @@ -314,8 +263,8 @@ Email.sendAsync = async function (options) { if (mailUrlEnv || mailUrlSettings) { const transport = getTransport(); - smtpSend(transport, email); + smtpSend(transport, options); return; } - return devModeSendAsync(email, options); + devModeSend(options); }; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js deleted file mode 100644 index a8706ab1c9..0000000000 --- a/packages/email/email_test_helpers.js +++ /dev/null @@ -1,21 +0,0 @@ -import streamBuffers from 'stream-buffers'; - -export const devWarningBanner = - '(Mail not sent; to enable ' + - 'sending, set the MAIL_URL environment variable.)\n'; - -export const smokeEmailTest = (testFunction) => { - // This only tests dev mode, so don't run the test if this is deployed. - if (process.env.MAIL_URL) return; - const stream = new streamBuffers.WritableStreamBuffer(); - EmailTest.resetNextDevModeMailId(); - testFunction(stream); -}; - -export const canonicalize = (string) => { - // Remove generated content for test.equal to succeed. - return string - .replace(/Message-ID: <[^<>]*>\r\n/, 'Message-ID: <...>\r\n') - .replace(/Date: (?!dummy).*\r\n/, 'Date: ...\r\n') - .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/gm, '$1--...$2'); -}; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 6f016f26b9..877264ce95 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,85 +1,304 @@ -import { Email } from 'meteor/email'; -import { smokeEmailTest } from './email_test_helpers'; -import { TEST_CASES } from './email_tests_data'; +import streamBuffers from 'stream-buffers'; -const CUSTOM_TRANSPORT_SETTINGS = { - email: { service: '1on1', user: 'test', password: 'pwd' }, -}; +const devWarningBanner = "(Mail not sent; to enable " + + "sending, set the MAIL_URL environment variable.)\n"; -const sleep = (ms) => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; +function smokeEmailTest(testFunction) { + // This only tests dev mode, so don't run the test if this is deployed. + if (process.env.MAIL_URL) return; -// Create dynamic sync tests -TEST_CASES.forEach(({ title, options, testCalls }) => { - Tinytest.add(`[Sync] ${title}`, function (test) { - smokeEmailTest((stream) => { - Object.entries(options).forEach(([key, option]) => { - const testCall = testCalls[key]; - Email.send({ ...option, stream }); - testCall(test, stream); - }); - }); - }); -}); + try { + const stream = new streamBuffers.WritableStreamBuffer; + EmailTest.overrideOutputStream(stream); -// Create dynamic async tests -TEST_CASES.forEach(({ title, options, testCalls }) => { - Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { - smokeEmailTest((stream) => { - const allPromises = Object.entries(options).map(([key, option]) => { - const testCall = testCalls[key]; - return Email.sendAsync({ ...option, stream }).then(() => { - testCall(test, stream); - }); - }); - Promise.all(allPromises).then(() => onComplete()); - }); - }); -}); + testFunction(stream); -// Individual sync tests - -Tinytest.add( - '[Sync] email - alternate API is used for sending gets data', - function (test) { - smokeEmailTest(function (stream) { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }); - test.equal(stream.getContentsAsString('utf8'), false); - }); - - smokeEmailTest(function (stream) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }); - - test.equal(stream.getContentsAsString('utf8'), false); - }); - Email.customTransport = undefined; - Meteor.settings.packages = undefined; + } finally { + EmailTest.restoreOutputStream(); } -); +} -Tinytest.add('[Sync] email - hooks stop the sending', function (test) { +function canonicalize(string) { + // Remove generated content for test.equal to succeed. + return string.replace(/Message-ID: <[^<>]*>\r\n/, "Message-ID: <...>\r\n") + .replace(/Date: (?!dummy).*\r\n/, "Date: ...\r\n") + .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); +} + +Tinytest.add("email - fully customizable", function (test) { + smokeEmailTest(function(stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + cc: ["friends@example.com", "enemies@example.com"], + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + headers: { + 'X-Meteor-Test': 'a custom header', + 'Date': 'dummy', + }, + }); + // XXX brittle if mailcomposer changes header order, etc + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "X-Meteor-Test: a custom header\r\n" + + "Date: dummy\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Cc: friends@example.com, enemies@example.com\r\n" + + "Subject: This is the subject\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "This is the body\n" + + "of the message\n" + + "From us.\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - undefined headers sends properly", function (test) { + smokeEmailTest(function (stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + }); + + test.matches(canonicalize(stream.getContentsAsString("utf8")), + /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m); + }); +}); + +Tinytest.add("email - multiple e-mails same stream", function (test) { + smokeEmailTest(function (stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + }); + + const contents = canonicalize(stream.getContentsAsString("utf8")); + test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); + test.matches(contents, /^From: foo@example.com$/m); + test.matches(contents, /^To: bar@example.com$/m); + + Email.send({ + from: "qux@example.com", + to: "baz@example.com", + subject: "This is important", + text: "This is another message\nFrom Qux.", + }); + + const contents2 = canonicalize(stream.getContentsAsString("utf8")); + test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); + test.matches(contents2, /^From: qux@example.com$/m); + test.matches(contents2, /^To: baz@example.com$/m); + + }); +}); + +Tinytest.add("email - using mail composer", function (test) { + smokeEmailTest(function (stream) { + // Test direct MailComposer usage. + const mc = new EmailInternals.NpmModules.mailcomposer.module({ + from: "a@b.com", + text: "body" + }); + Email.send({mailComposer: mc}); + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: a@b.com\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "body\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - date auto generated", function (test) { + smokeEmailTest(function (stream) { + // Test if date header is automatically generated, if not specified + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + headers: { + 'X-Meteor-Test': 'a custom header', + }, + }); + + test.matches(canonicalize(stream.getContentsAsString("utf8")), + /^Date: .+$/m); + }); +}); + +Tinytest.add("email - long lines", function (test) { + smokeEmailTest(function (stream) { + // Test that long header lines get wrapped with single leading whitespace, + // and that long body lines get wrapped with quoted-printable conventions. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is a very very very very very very very very very very very very long subject", + text: "This is a very very very very very very very very very very very very long text", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Subject: This is a very very very very very very very very " + + "very very very\r\n very long subject\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: quoted-printable\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "This is a very very very very very very very very very very " + + "very very long =\r\ntext\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - unicode", function (test) { + smokeEmailTest(function (stream) { + // Test that unicode characters in header and body get encoded. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "\u263a", + text: "I \u2665 Meteor", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Subject: =?UTF-8?B?4pi6?=\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: quoted-printable\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "I =E2=99=A5 Meteor\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - text and html", function (test) { + smokeEmailTest(function (stream) { + // Test including both text and HTML versions of message. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: multipart/alternative;\r\n" + + ' boundary="--...-Part_1"\r\n' + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Message-ID: <...>\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "----...-Part_1\r\n" + + "Content-Type: text/plain; charset=utf-8\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "\r\n" + + "*Cool*, man\r\n" + + "----...-Part_1\r\n" + + "Content-Type: text/html; charset=utf-8\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "\r\n" + + "Cool, man\r\n" + + "----...-Part_1--\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - alternate API is used for sending gets data", function(test) { + smokeEmailTest(function(stream) { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + test.equal(stream.getContentsAsString("utf8"), false); + }); + + smokeEmailTest(function(stream) { + Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' } }; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + + test.equal(stream.getContentsAsString("utf8"), false); + }); + Email.customTransport = undefined; + Meteor.settings.packages = undefined; +}); + +Tinytest.add("email - URL string for known hosts", function(test) { + const oneTransport = EmailTest.knowHostsTransport({ service: '1und1', user: 'test', password: 'pwd' }); + test.equal(oneTransport.transporter.auth.type, 'LOGIN'); + test.equal(oneTransport.transporter.auth.user, 'test'); + + const aolUrlTransport = EmailTest.knowHostsTransport(null, 'AOL://test:pwd@aol.com'); + test.equal(aolUrlTransport.transporter.auth.user, 'test'); + test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); + + const outlookTransport = EmailTest.knowHostsTransport(null, 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com'); + const outlookTransport2 = EmailTest.knowHostsTransport(undefined, 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com'); + test.equal(outlookTransport.transporter.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport.options.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport.transporter.options.service, 'outlook365'); + test.equal(outlookTransport2.transporter.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport2.transporter.options.service, 'outlook365'); + + const hotmailTransport = EmailTest.knowHostsTransport(undefined, 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com'); + console.dir(hotmailTransport); + test.equal(hotmailTransport.transporter.options.service, 'hotmail'); + + const falseService = { service: '1on1', user: 'test', password: 'pwd' }; + const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; + test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); + test.throws(() => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), errorMsg); +}); + +Tinytest.add("email - hooks stop the sending", function(test) { // Register hooks const hook1 = Email.hookSend((options) => { // Test that we get options through @@ -94,218 +313,17 @@ Tinytest.add('[Sync] email - hooks stop the sending', function (test) { const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(function (stream) { + smokeEmailTest(function(stream) { Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", }); - test.equal(stream.getContentsAsString('utf8'), false); + test.equal(stream.getContentsAsString("utf8"), false); }); hook1.stop(); hook2.stop(); hook3.stop(); }); - -// Individual Async tests - -Tinytest.addAsync( - '[Async] email - alternate API is used for sending gets data', - function (test, onComplete) { - const allPromises = []; - smokeEmailTest((stream) => { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - allPromises.push( - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - }) - ); - }); - - smokeEmailTest(function (stream) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - allPromises.push( - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - }) - ); - }); - Promise.all(allPromises).then(() => { - Email.customTransport = undefined; - Meteor.settings.packages = undefined; - onComplete(); - }); - } -); - -Tinytest.addAsync( - '[Async] email - hooks stop the sending', - function (test, onComplete) { - // Register hooks - const hook1 = Email.hookSend((options) => { - // Test that we get options through - test.equal(options.from, 'foo@example.com'); - console.log('EXECUTE'); - return true; - }); - const hook2 = Email.hookSend(() => { - console.log('STOP'); - return false; - }); - const hook3 = Email.hookSend(() => { - console.log('FAIL'); - }); - smokeEmailTest((stream) => { - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - hook1.stop(); - hook2.stop(); - hook3.stop(); - onComplete(); - }); - }); - } -); - -// Another tests - -Tinytest.add('[Sync] email - URL string for known hosts', function (test) { - const oneTransport = EmailTest.knowHostsTransport({ - service: '1und1', - user: 'test', - password: 'pwd', - }); - test.equal(oneTransport.transporter.auth.type, 'LOGIN'); - test.equal(oneTransport.transporter.auth.user, 'test'); - - const aolUrlTransport = EmailTest.knowHostsTransport( - null, - 'AOL://test:pwd@aol.com' - ); - test.equal(aolUrlTransport.transporter.auth.user, 'test'); - test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); - - const outlookTransport = EmailTest.knowHostsTransport( - null, - 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com' - ); - const outlookTransport2 = EmailTest.knowHostsTransport( - undefined, - 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com' - ); - test.equal( - outlookTransport.transporter.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal( - outlookTransport.options.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal(outlookTransport.transporter.options.service, 'outlook365'); - test.equal( - outlookTransport2.transporter.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal(outlookTransport2.transporter.options.service, 'outlook365'); - - const hotmailTransport = EmailTest.knowHostsTransport( - undefined, - 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com' - ); - console.dir(hotmailTransport); - test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - - const falseService = CUSTOM_TRANSPORT_SETTINGS.email; - const errorMsg = - 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; - test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); - test.throws( - () => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), - errorMsg - ); -}); - -Tinytest.addAsync( - '[Async] email - with custom transport exception', - async function (test) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - throw new Meteor.Error('Expected error'); - }; - await Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - }).catch((err) => { - test.equal(err.error, 'Expected error'); - }); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - } -); - -Tinytest.addAsync( - '[Async] email - with custom transport long time running', - async function (test) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = async (options) => { - await sleep(3000); - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - await Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - }); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - } -); - -Tinytest.addAsync( - '[Sync] email - with custom transport long time running', - function (test, onComplete) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = async (options) => { - await sleep(3000); - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - onComplete(); - }; - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - }); - } -); diff --git a/packages/email/email_tests_data.js b/packages/email/email_tests_data.js deleted file mode 100644 index 095c1fb9d2..0000000000 --- a/packages/email/email_tests_data.js +++ /dev/null @@ -1,254 +0,0 @@ -import { canonicalize, devWarningBanner } from './email_test_helpers'; - -export const TEST_CASES = [ - { - title: 'email - fully customizable', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - cc: ['friends@example.com', 'enemies@example.com'], - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - headers: { - 'X-Meteor-Test': 'a custom header', - Date: 'dummy', - }, - }, - }, - testCalls: { - 0: (test, stream) => { - // XXX brittle if mailcomposer changes header order, etc - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'X-Meteor-Test: a custom header\r\n' + - 'Date: dummy\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Cc: friends@example.com, enemies@example.com\r\n' + - 'Subject: This is the subject\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'This is the body\n' + - 'of the message\n' + - 'From us.\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - undefined headers sends properly', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - }, - }, - testCalls: { - 0: (test, stream) => { - test.matches( - canonicalize(stream.getContentsAsString('utf8')), - /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m - ); - }, - }, - }, - { - title: 'email - multiple e-mails same stream', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - }, - 1: { - from: 'qux@example.com', - to: 'baz@example.com', - subject: 'This is important', - text: 'This is another message\nFrom Qux.', - }, - }, - - testCalls: { - 0: (test, stream) => { - const contents = canonicalize(stream.getContentsAsString('utf8')); - test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); - test.matches(contents, /^From: foo@example.com$/m); - test.matches(contents, /^To: bar@example.com$/m); - }, - 1: (test, stream) => { - const contents2 = canonicalize(stream.getContentsAsString('utf8')); - test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); - test.matches(contents2, /^From: qux@example.com$/m); - test.matches(contents2, /^To: baz@example.com$/m); - }, - }, - }, - { - title: 'email - using mail composer', - options: { - 0: { - mailComposer: new EmailInternals.NpmModules.mailcomposer.module({ - from: 'a@b.com', - text: 'body', - }), - }, - }, - - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: a@b.com\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'body\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - date auto generated', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - headers: { - 'X-Meteor-Test': 'a custom header', - }, - }, - }, - testCalls: { - 0: (test, stream) => { - test.matches( - canonicalize(stream.getContentsAsString('utf8')), - /^Date: .+$/m - ); - }, - }, - }, - { - title: 'email - long lines', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: - 'This is a very very very very very very very very very very very very long subject', - text: 'This is a very very very very very very very very very very very very long text', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Subject: This is a very very very very very very very very ' + - 'very very very\r\n very long subject\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: quoted-printable\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'This is a very very very very very very very very very very ' + - 'very very long =\r\ntext\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - unicode', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: '\u263a', - text: 'I \u2665 Meteor', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Subject: =?UTF-8?B?4pi6?=\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: quoted-printable\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'I =E2=99=A5 Meteor\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - text and html', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: multipart/alternative;\r\n' + - ' boundary="--...-Part_1"\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Message-ID: <...>\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - '----...-Part_1\r\n' + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - '\r\n' + - '*Cool*, man\r\n' + - '----...-Part_1\r\n' + - 'Content-Type: text/html; charset=utf-8\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - '\r\n' + - 'Cool, man\r\n' + - '----...-Part_1--\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, -]; - diff --git a/packages/email/package.js b/packages/email/package.js index cc02138f6d..326bad392a 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3', + version: '2.2.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index d9c824f27f..c2964cf842 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -4,13 +4,13 @@ import { Accounts } from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; -Facebook.handleAuthFromAccessToken = async (accessToken, expiresAt) => { +Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'middle_name', 'name_format', 'picture', 'short_name']; - const identity = await getIdentity(accessToken, whitelisted); + const identity = getIdentity(accessToken, whitelisted); const fields = {}; whitelisted.forEach(field => fields[field] = identity[field]); @@ -34,8 +34,8 @@ Accounts.registerLoginHandler(request => { return Accounts.updateOrCreateUserFromExternalService('facebook', facebookData.serviceData, facebookData.options); }); -OAuth.registerService('facebook', 2, null, async query => { - const response = await getTokenResponse(query); +OAuth.registerService('facebook', 2, null, query => { + const response = getTokenResponse(query); const { accessToken } = response; const { expiresIn } = response; @@ -52,7 +52,7 @@ function getAbsoluteUrlOptions(query) { const redirectUrl = new URL(state.redirectUrl); return { rootUrl: redirectUrl.origin, - }; + } } catch (e) { console.error( `Failed to complete OAuth handshake with Facebook because it was not able to obtain the redirect url from the state and you are using overrideRootUrlFromStateRedirectUrl.`, e @@ -61,86 +61,73 @@ function getAbsoluteUrlOptions(query) { } } -/** - * @typedef {Object} UserAccessToken - * @property {string} accessToken - User access Token - * @property {number} expiresIn - lifetime of token in seconds - */ -/** - * @async - * @function getTokenResponse - * @param {Object} query - An object with the code. - * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) - */ -const getTokenResponse = async (query) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'facebook', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +// returns an object containing: +// - accessToken +// - expiresIn: lifetime of token in seconds +const getTokenResponse = query => { + const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); - const absoluteUrlOptions = getAbsoluteUrlOptions(query); - const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); + let responseContent; + try { - return OAuth._fetch( - `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, - 'GET', - { - queryParams: { - client_id: config.appId, - redirect_uri: redirectUri, - client_secret: OAuth.openSecret(config.secret), - code: query.code, - }, - } - ) - .then((res) => res.json()) - .then(data => { - const fbAccessToken = data.access_token; - const fbExpires = data.expires_in; - if (!fbAccessToken) { - throw new Error("Failed to complete OAuth handshake with facebook " + - `-- can't find access token in HTTP response. ${data}`); - } - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; - }) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Facebook. ${err.message}` - ), - { response: err.response } - ); - }); + const absoluteUrlOptions = getAbsoluteUrlOptions(query); + const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); + // Request an access token + responseContent = HTTP.get( + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { + params: { + client_id: config.appId, + redirect_uri: redirectUri, + client_secret: OAuth.openSecret(config.secret), + code: query.code + } + }).data; + } catch (err) { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), + { response: err.response }, + ); + } + + const fbAccessToken = responseContent.access_token; + const fbExpires = responseContent.expires_in; + + if (!fbAccessToken) { + throw new Error("Failed to complete OAuth handshake with facebook " + + `-- can't find access token in HTTP response. ${responseContent}`); + } + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; }; -const getIdentity = async (accessToken, fields) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'facebook', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +const getIdentity = (accessToken, fields) => { + const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); // Generate app secret proof that is a sha256 hash of the app access token, with the app secret as the key // https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof const hmac = crypto.createHmac('sha256', OAuth.openSecret(config.secret)); hmac.update(accessToken); - return OAuth._fetch(`https://graph.facebook.com/v${API_VERSION}/me`, 'GET', { - queryParams: { - access_token: accessToken, - appsecret_proof: hmac.digest('hex'), - fields: fields.join(','), - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error(`Failed to fetch identity from Facebook. ${err.message}`), - { response: err.response } - ); - }); + try { + return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { + params: { + access_token: accessToken, + appsecret_proof: hmac.digest('hex'), + fields: fields.join(",") + } + }).data; + } catch (err) { + throw Object.assign( + new Error(`Failed to fetch identity from Facebook. ${err.message}`), + { response: err.response }, + ); + } }; Facebook.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 98b393d2a9..5df363643a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2' + version: '1.11.1' }); Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/github-oauth/github_server.js b/packages/github-oauth/github_server.js index 7b4f36f5f6..b71995d1c0 100644 --- a/packages/github-oauth/github_server.js +++ b/packages/github-oauth/github_server.js @@ -1,9 +1,12 @@ Github = {}; -OAuth.registerService('github', 2, null, async (query) => { - const accessToken = await getAccessToken(query); - const identity = await getIdentity(accessToken); - const emails = await getEmails(accessToken); +OAuth.registerService('github', 2, null, (query) => { + const accessTokenCall = Meteor.wrapAsync(getAccessToken); + const accessToken = accessTokenCall(query); + const identityCall = Meteor.wrapAsync(getIdentity); + const identity = identityCall(accessToken); + const emailsCall = Meteor.wrapAsync(getEmails); + const emails = emailsCall(accessToken); const primaryEmail = emails.find((email) => email.primary); return { @@ -28,7 +31,7 @@ OAuth.registerService('github', 2, null, async (query) => { let userAgent = 'Meteor'; if (Meteor.release) userAgent += `/${Meteor.release}`; -const getAccessToken = async (query) => { +const getAccessToken = async (query, callback) => { const config = ServiceConfiguration.configurations.findOne({ service: 'github' }); @@ -65,16 +68,18 @@ const getAccessToken = async (query) => { ); } if (response.error) { + callback(response.error); // if the http response was a json object with an error attribute throw new Error( `Failed to complete OAuth handshake with GitHub. ${response.error}` ); } else { + callback(null, response.access_token); return response.access_token; } }; -const getIdentity = async (accessToken) => { +const getIdentity = async (accessToken, callback) => { try { const request = await fetch('https://api.github.com/user', { method: 'GET', @@ -84,8 +89,11 @@ const getIdentity = async (accessToken) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - return await request.json(); + const response = await request.json(); + callback(null, response); + return response; } catch (err) { + callback(err.message); throw Object.assign( new Error(`Failed to fetch identity from Github. ${err.message}`), { response: err.response } @@ -93,7 +101,7 @@ const getIdentity = async (accessToken) => { } }; -const getEmails = async (accessToken) => { +const getEmails = async (accessToken, callback) => { try { const request = await fetch('https://api.github.com/user/emails', { method: 'GET', @@ -103,8 +111,11 @@ const getEmails = async (accessToken) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - return await request.json(); + const response = await request.json(); + callback(null, response); + return response; } catch (err) { + callback(err.message, []); return []; } }; diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2316e275a2..de8e9415cb 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1' + version: '1.4.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index a25637be75..d13c285914 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -5,46 +5,40 @@ import { fetch } from 'meteor/fetch'; const hasOwn = Object.prototype.hasOwnProperty; // https://developers.google.com/accounts/docs/OAuth2Login#userinfocall -Google.whitelistedFields = [ - 'id', - 'email', - 'verified_email', - 'name', - 'given_name', - 'family_name', - 'picture', - 'locale', - 'timezone', - 'gender', -]; +Google.whitelistedFields = ['id', 'email', 'verified_email', 'name', 'given_name', + 'family_name', 'picture', 'locale', 'timezone', 'gender']; -const getServiceDataFromTokens = async (tokens, callback) => { +const getServiceDataFromTokens = tokens => { const { accessToken, idToken } = tokens; - const scopes = await getScopes(accessToken).catch((err) => { - const error = Object.assign( + const scopesCall = Meteor.wrapAsync(getScopes); + let scopes; + try { + scopes = scopesCall(accessToken); + } catch (err) { + throw Object.assign( new Error(`Failed to fetch tokeninfo from Google. ${err.message}`), { response: err.response } ); - callback && callback(error); - throw error; - }); - - let identity = await getIdentity(accessToken).catch((err) => { - const error = Object.assign( + } + const identityCall = Meteor.wrapAsync(getIdentity); + let identity; + try { + identity = identityCall(accessToken); + } catch (err) { + throw Object.assign( new Error(`Failed to fetch identity from Google. ${err.message}`), { response: err.response } ); - callback && callback(error); - throw error; - }); + } const serviceData = { accessToken, idToken, - scope: scopes, + scope: scopes }; - if (hasOwn.call(tokens, 'expiresIn')) { - serviceData.expiresAt = Date.now() + 1000 * parseInt(tokens.expiresIn, 10); + if (hasOwn.call(tokens, "expiresIn")) { + serviceData.expiresAt = + Date.now() + 1000 * parseInt(tokens.expiresIn, 10); } const fields = Object.create(null); @@ -62,25 +56,22 @@ const getServiceDataFromTokens = async (tokens, callback) => { if (tokens.refreshToken) { serviceData.refreshToken = tokens.refreshToken; } - const returnValue = { + + return { serviceData, options: { profile: { - name: identity.name, - }, - }, + name: identity.name + } + } }; - - callback && callback(undefined, returnValue); - - return returnValue; }; -Accounts.registerLoginHandler(async (request) => { +Accounts.registerLoginHandler(request => { if (request.googleSignIn !== true) { return; } - console.log({ request }); + const tokens = { accessToken: request.accessToken, refreshToken: request.refreshToken, @@ -88,38 +79,29 @@ Accounts.registerLoginHandler(async (request) => { }; if (request.serverAuthCode) { - Object.assign( - tokens, - await getTokens({ - code: request.serverAuthCode, - }) - ); + Object.assign(tokens, getTokens({ + code: request.serverAuthCode + })); } let result; try { - result = await getServiceDataFromTokens(tokens); + result = getServiceDataFromTokens(tokens); } catch (err) { throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Google. ${err.message}` - ), + new Error(`Failed to complete OAuth handshake with Google. ${err.message}`), { response: err.response } ); } - console.log({ result }); - return Accounts.updateOrCreateUserFromExternalService( - 'google', - { - id: request.userId, - idToken: request.idToken, - accessToken: request.accessToken, - email: request.email, - picture: request.imageUrl, - ...result.serviceData, - }, - result.options - ); + + return Accounts.updateOrCreateUserFromExternalService("google", { + id: request.userId, + idToken: request.idToken, + accessToken: request.accessToken, + email: request.email, + picture: request.imageUrl, + ...result.serviceData, + }, result.options); }); // returns an object containing: @@ -127,48 +109,45 @@ Accounts.registerLoginHandler(async (request) => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request const getTokens = async (query, callback) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'google', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({service: 'google'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); const content = new URLSearchParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('google', config), - grant_type: 'authorization_code', - }); - const request = await fetch('https://accounts.google.com/o/oauth2/token', { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: content, + grant_type: 'authorization_code' }); + const request = await fetch( + "https://accounts.google.com/o/oauth2/token", { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: content, + }); const response = await request.json(); - if (response.error) { - // if the http response was a json object with an error attribute - callback && callback(response.error); - throw new Meteor.Error( - `Failed to complete OAuth handshake with Google. ${response.error}` - ); + if (response.error) { // if the http response was a json object with an error attribute + callback(response.error); + throw new Meteor.Error(`Failed to complete OAuth handshake with Google. ${response.error}`); } else { const data = { accessToken: response.access_token, refreshToken: response.refresh_token, expiresIn: response.expires_in, - idToken: response.id_token, + idToken: response.id_token }; - callback && callback(undefined, data); + callback(undefined, data); return data; } }; -const getServiceData = async (query) => - getServiceDataFromTokens(await getTokens(query)); +const getTokensCall = Meteor.wrapAsync(getTokens); +const getServiceData = query => getServiceDataFromTokens(getTokensCall(query)); OAuth.registerService('google', 2, null, getServiceData); @@ -180,15 +159,14 @@ const getIdentity = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/userinfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' }, - } - ); + headers: { Accept: 'application/json' } + }); response = await request.json(); } catch (e) { - callback && callback(e); + callback(e); throw new Meteor.Error(e.reason); } - callback && callback(undefined, response); + callback(undefined, response); return response; }; @@ -200,15 +178,14 @@ const getScopes = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/tokeninfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' }, - } - ); + headers: { Accept: 'application/json' } + }); response = await request.json(); } catch (e) { - callback && callback(e); + callback(e); throw new Meteor.Error(e.reason); } - callback && callback(undefined, response.scope.split(' ')); + callback(undefined, response.scope.split(' ')); return response.scope.split(' '); }; diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 141c79e6c6..102f60b0ac 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3", + version: "1.4.2", }); Cordova.depends({ diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index bfc465c7b3..cffa8da9e5 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -1,10 +1,10 @@ Meetup = {}; -OAuth.registerService('meetup', 2, null, async query => { - const response = await getAccessToken(query); +OAuth.registerService('meetup', 2, null, query => { + const response = getAccessToken(query); const accessToken = response.access_token; const expiresAt = (+new Date) + (1000 * response.expires_in); - const identity = await getIdentity(accessToken); + const identity = getIdentity(accessToken); const { id, name, @@ -33,63 +33,50 @@ OAuth.registerService('meetup', 2, null, async query => { }; }); -const getAccessToken = async query => { +const getAccessToken = query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - const body = OAuth._addValuesToQueryParams({ - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - grant_type: 'authorization_code', - redirect_uri: OAuth._redirectUri('meetup', config), - state: query.state - }); + let response; + try { + response = HTTP.post( + "https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + grant_type: 'authorization_code', + redirect_uri: OAuth._redirectUri('meetup', config), + state: query.state + }}); + } catch (err) { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), + { response: err.response } + ); + } - return OAuth._fetch('https://secure.meetup.com/oauth2/access', 'POST', { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - }) - .then(data => data.json()) - .then(data => { - if (data.error) { - throw new Error(`Failed to complete OAuth handshake with Meetup. ${data.error.message}`); - } - return data; - }) - .catch(err => { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), - { response: err.response }, - ); - }); + if (response.data.error) { // if the http response was a json object with an error attribute + throw new Error(`Failed to complete OAuth handshake with Meetup. ${response.data.error}`); + } else { + return response.data; + } }; -const getIdentity = async accessToken => { - const body = OAuth._addValuesToQueryParams({ - member_id: 'self', - access_token: accessToken - }); - - return OAuth._fetch('https://api.meetup.com/2/members', 'POST', { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - }).then(data => data.json()) - .then(({results = []}) => results.length && results[0]) - .catch(err => { +const getIdentity = accessToken => { + try { + const response = HTTP.get( + "https://api.meetup.com/2/members", + {params: {member_id: 'self', access_token: accessToken}}); + return response.data.results && response.data.results[0]; + } catch (err) { throw Object.assign( new Error(`Failed to fetch identity from Meetup. ${err.message}`), { response: err.response } ); - }); + } }; + Meetup.retrieveCredential = (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index e5049f19cf..83df9f74a3 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2' + version: '1.1.1' }); Package.onUse(api => { api.use('ecmascript'); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', 'server'); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index 57dd193ae1..c563ba47e8 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -1,7 +1,7 @@ -OAuth.registerService("meteor-developer", 2, null, async query => { - const response = await getTokens(query); +OAuth.registerService("meteor-developer", 2, null, query => { + const response = getTokens(query); const { accessToken } = response; - const identity = await getIdentity(accessToken); + const identity = getIdentity(accessToken); const serviceData = { accessToken: OAuth.sealSecret(accessToken), @@ -28,77 +28,69 @@ OAuth.registerService("meteor-developer", 2, null, async query => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = async (query) => { +const getTokens = query => { const config = ServiceConfiguration.configurations.findOne({ - service: 'meteor-developer', + service: 'meteor-developer' }); - if (!config) { + if (!config) throw new ServiceConfiguration.ConfigError(); + + let response; + try { + response = HTTP.post( + MeteorDeveloperAccounts._server + "/oauth2/token", { + params: { + grant_type: "authorization_code", + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('meteor-developer', config) + } + } + ); + } catch (err) { + throw Object.assign( + new Error( + "Failed to complete OAuth handshake with Meteor developer accounts. " + + err.message + ), + {response: err.response} + ); } - const body = OAuth._addValuesToQueryParams({ - grant_type: 'authorization_code', - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('meteor-developer', config), - }).toString(); + if (! response.data || response.data.error) { + // if the http response was a json object with an error attribute + throw new Error( + "Failed to complete OAuth handshake with Meteor developer accounts. " + + (response.data ? response.data.error : + "No response data") + ); + } else { + return { + accessToken: response.data.access_token, + refreshToken: response.data.refresh_token, + expiresIn: response.data.expires_in + }; + } +}; - return OAuth._fetch( - MeteorDeveloperAccounts._server + '/oauth2/token', - 'POST', - { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - } - ) - .then((data) => data.json()) - .then((data) => { - if (data.error) { - throw new Error( - 'Failed to complete OAuth handshake with Meteor developer accounts. ' + - (data ? data.error : 'No response data') - ); +const getIdentity = accessToken => { + try { + return HTTP.get( + `${MeteorDeveloperAccounts._server}/api/v1/identity`, + { + headers: { Authorization: `Bearer ${accessToken}`} } - return { - accessToken: data.access_token, - refreshToken: data.refresh_token, - expiresIn: data.expires_in, - }; - }) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` - ), - { response: err.response } - ); - }); + ).data; + } catch (err) { + throw Object.assign( + new Error("Failed to fetch identity from Meteor developer accounts. " + + err.message), + {response: err.response} + ); + } }; -const getIdentity = async (accessToken) => { - return OAuth._fetch( - `${MeteorDeveloperAccounts._server}/api/v1/identity`, - 'GET', - { - headers: { Authorization: `Bearer ${accessToken}` }, - } - ) - .then((data) => data.json()) - .catch((err) => { - throw Object.assign( - new Error( - 'Failed to fetch identity from Meteor developer accounts. ' + - err.message - ), - { response: err.response } - ); - }); -}; - -MeteorDeveloperAccounts.retrieveCredential = - (credentialToken, credentialSecret) => +MeteorDeveloperAccounts.retrieveCredential = + (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 36e4dbb76c..b1463542d5 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,11 +1,12 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2' + version: '1.3.1' }); Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bafb59a62e..eddeaa008c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0', + version: '2.8.2', }); Package.includeTool(); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js deleted file mode 100644 index 27d9b227cb..0000000000 --- a/packages/meteor/asl-helpers.js +++ /dev/null @@ -1,22 +0,0 @@ -const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {}; -const getValueFromAslStore = key => getAslStore()[key]; -const updateAslStore = (key, value) => getAslStore()[key] = value; - -Meteor._isFibersEnabled = !process.env.DISABLE_FIBERS && Meteor.isServer; -Meteor._getAslStore = getAslStore; -Meteor._getValueFromAslStore = getValueFromAslStore; -Meteor._updateAslStore = updateAslStore; - -Meteor._runAsync = (fn, ctx) => { - if (Meteor._isFibersEnabled) { - const Fiber = Npm.require('fibers'); - - return Fiber(() => { - fn.call(ctx); - }).run(); - } - - global.asyncLocalStorage.run(Meteor._getAslStore(), () => { - fn.call(ctx); - }); -}; diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index 242921945c..ad28064003 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -71,38 +71,6 @@ Meteor._delete = function (obj /*, arguments */) { } }; - -/** - * 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 - * @returns {function(...[*]): Promise} - */ -Meteor.promisify = function (fn, context, errorFirst = true) { - return function (...fnArgs) { - return new Promise((resolve, reject) => { - const callback = Meteor.bindEnvironment((error, result) => { - let _error = error, _result = result; - if (!errorFirst) { - _error = result; - _result = error; - } - - if (_error) { - return reject(_error); - } - - resolve(_result); - }); - - const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined); - return fn.apply(context || this, filteredArgs); - }); - }; -}; - // wrapAsync can wrap any function that takes some number of arguments that // can't be undefined, followed by some optional arguments, where the callback // is the last optional argument. @@ -203,3 +171,5 @@ function logErr(err) { ); } } + +Meteor._isFibersEnabled = global._isFibersEnabled; diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index eb08d994bd..0a482c0aa9 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,19 +147,12 @@ export namespace Meteor { }): void; /** - * Invokes a method with a sync stub, passing any number of arguments. + * Invokes a method passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; - /** - * Invokes a method with an async stub, passing any number of arguments. - * @param name Name of method to invoke - * @param args Optional method arguments - */ - function callAsync(name: string, ...args: any[]): Promise; - function apply< Result extends | EJSONable @@ -441,14 +434,7 @@ export namespace Meteor { */ function publish( name: string | null, - func: ( - this: Subscription, - ...args: any[] - ) => - | void - | Mongo.Cursor - | Mongo.Cursor[] - | Promise | Mongo.Cursor[]>, + func: (this: Subscription, ...args: any[]) => void, options?: { is_auto: boolean } ): void; diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7007d77957..930478dc07 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3' + version: '1.10.2' }); Package.registerBuildPlugin({ @@ -33,7 +33,6 @@ Package.onUse(function (api) { api.addFiles('setimmediate.js', ['client', 'server']); api.addFiles('timers.js', ['client', 'server']); api.addFiles('errors.js', ['client', 'server']); - api.addFiles('asl-helpers.js', 'server'); api.addFiles('fiber_helpers.js', 'server'); api.addFiles('fiber_stubs_client.js', 'client'); api.addFiles('startup_client.js', ['client']); @@ -55,6 +54,8 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); + + api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js deleted file mode 100644 index 755595ba6e..0000000000 --- a/packages/minifier-css/minifier-async-tests.js +++ /dev/null @@ -1,51 +0,0 @@ -import { CssTools } from './minifier'; -const TEST_CASES = [ - ['a \t\n{ color: red } \n', 'a{color:red}', 'whitespace check'], - [ - 'a \t\n{ color: red; margin: 1; } \n', - 'a{color:red;margin:1}', - 'only last one loses semicolon', - ], - [ - 'a \t\n{ color: red;;; margin: 1;;; } \n', - 'a{color:red;margin:1}', - 'more semicolons than needed', - ], - ['a , p \t\n{ color: red; } \n', 'a,p{color:red}', 'multiple selectors'], - ['body {}', '', 'removing empty rules'], - [ - '*.my-class { color: #fff; }', - '.my-class{color:#fff}', - 'removing universal selector', - ], - [ - 'p > *.my-class { color: #fff; }', - 'p>.my-class{color:#fff}', - 'removing optional whitespace around ">" in selector', - ], - [ - 'p + *.my-class { color: #fff; }', - 'p+.my-class{color:#fff}', - 'removing optional whitespace around "+" in selector', - ], - [ - 'a {\n\ - font:12px \'Helvetica\',"Arial",\'Nautica\';\n\ - background:url("/some/nice/picture.png");\n}', - 'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}', - 'removing quotes in font and url (if possible)', - ], - ['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'], -]; - -Tinytest.addAsync( - '[Async] minifier-css - simple CSS minification', - async (test) => { - const promises = TEST_CASES.map(([css, expected, desc]) => - CssTools.minifyCssAsync(css).then((minifiedCss) => { - test.equal(minifiedCss[0], expected, desc); - }) - ); - return Promise.all(promises); - } -); diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index a4c662e9e5..174452f1ee 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -1,5 +1,6 @@ import path from 'path'; import url from 'url'; +import Future from 'fibers/future'; import postcss from 'postcss'; import cssnano from 'cssnano'; @@ -64,21 +65,23 @@ const CssTools = { * @return {String[]} Array containing the minified CSS. */ minifyCss(cssText) { - return Promise.await(CssTools.minifyCssAsync(cssText)); - }, + const f = new Future; + postcss([ + cssnano({ safe: true }), + ]).process(cssText, { + from: void 0, + }).then(result => { + f.return(result.css); + }).catch(error => { + f.throw(error); + }); + const minifiedCss = f.wait(); - /** - * Minify the passed in CSS string. - * - * @param {string} cssText CSS string to minify. - * @return {Promise} Array containing the minified CSS. - */ - async minifyCssAsync(cssText) { - return await postcss([cssnano({ safe: true })]) - .process(cssText, { - from: void 0, - }) - .then((result) => [result.css]); + // Since this function has always returned an array, we'll wrap the + // minified css string in an array before returning, even though we're + // only ever returning one minified css string in that array (maintaining + // backwards compatibility). + return [minifiedCss]; }, /** @@ -184,7 +187,6 @@ if (typeof Profile !== 'undefined') { 'parseCss', 'stringifyCss', 'minifyCss', - 'minifyCssAsync', 'mergeCssAsts', 'rewriteCssUrls', ].forEach(funcName => { diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 373e5ae579..022ed4c78c 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2' + version: '1.6.1' }); Npm.depends({ @@ -19,7 +19,6 @@ Package.onTest(function (api) { api.use('tinytest'); api.addFiles([ 'minifier-tests.js', - 'minifier-async-tests.js', 'urlrewriting-tests.js' ], 'server'); }); diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 0c119a8f81..72a51cd67b 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,11 +39,7 @@ export default class Cursor { } /** - * @deprecated in 2.9 - * @summary Returns the number of documents that match a query. This method is - * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); - * see `Collection.countDocuments` and - * `Collection.estimatedDocumentCount` for a replacement. + * @summary Returns the number of documents that match a query. * @memberOf Mongo.Cursor * @method count * @instance diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index 43877fb87e..e3668eeb03 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,14 +39,6 @@ export default class LocalCollection { this.paused = false; } - countDocuments(selector, options) { - return this.find(selector ?? {}, options).countAsync(); - } - - estimatedDocumentCount(options) { - return this.find({}, options).countAsync(); - } - // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 2353ea1305..3b8e47fb2f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1' + version: '1.9.0' }); Package.onUse(api => { diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index d5b99edae4..3dcc12dc96 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,33 +319,6 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// - /** - * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. - * @locus Anywhere - * @method countDocuments - * @memberof Mongo.Collection - * @instance - * @param {MongoSelector} [selector] A query describing the documents to count - * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. - * @returns {Promise} - */ - countDocuments(...args) { - return this._collection.countDocuments(...args); - }, - - /** - * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. - * @locus Anywhere - * @method estimatedDocumentCount - * @memberof Mongo.Collection - * @instance - * @param {MongoSelector} [selector] A query describing the documents to count - * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. - * @returns {Promise} - */ - estimatedDocumentCount(...args) { - return this._collection.estimatedDocumentCount(...args); - }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index d709cee26c..5d3a277fa0 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,14 +19,3 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); - -['countDocuments', 'estimatedDocumentCount'].forEach(method => { - Tinytest.addAsync(`async collection - ${method}`, async test => { - const collection = new Mongo.Collection(method + test.id); - for (let index = 0; index < 10; ++index) { - test.instanceOf(collection[method](), Promise); - test.equal(await collection[method](), index); - collection.insert({}); - } - }); -}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 7b7b24ec00..98a7017403 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -826,18 +826,6 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; -MongoConnection.prototype.countDocuments = function (collectionName, ...args) { - args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); - const collection = this.rawCollection(collectionName); - return collection.countDocuments(...args); -}; - -MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { - args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); - const collection = this.rawCollection(collectionName); - return collection.estimatedDocumentCount(...args); -}; - MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 43c6e64411..952a37478f 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; +const arrayOperatorKeyRegex = /^(a|u\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -96,9 +96,7 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (position[0] === 's') { - convertOplogDiff(oplogEntry, value, positionKey); - } else if (value === null) { + if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index 79bcbada93..f87c8877f3 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,71 +77,6 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], - [ - { - $v: 2, - diff: { - sitems: { - a: true, - s0: { - u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, - sbio: { u: { en: 'Just Alice' } }, - slanguages: { - a: true, - s0: { - u: { englishName: 'English', key: 'en', localName: 'English' }, - }, - }, - }, - u1: { - id: 'FJwSQHqwpenCN6RQH', - name: 'Bob', - title: { en: 'Fictional character', sv: '' }, - bio: { en: 'Just Bob', sv: '' }, - avatar: null, - languages: [ - { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, - ], - }, - u2: null - }, - }, - }, - { - $v: 2, - $set: { - 'items.0.id': 'm57DsX8g8L66bM5JX', - 'items.0.name': 'Alice', - 'items.0.bio.en': 'Just Alice', - 'items.0.languages.0.englishName': 'English', - 'items.0.languages.0.key': 'en', - 'items.0.languages.0.localName': 'English', - 'items.1': { - id: 'FJwSQHqwpenCN6RQH', - name: 'Bob', - title: { - en: 'Fictional character', - sv: '', - }, - bio: { - en: 'Just Bob', - sv: '', - }, - avatar: null, - languages: [ - { - key: 'sv', - englishName: 'Swedish', - localName: 'Sverige', - }, - ], - }, - }, - $unset: { - 'items.2': true - } - }, - ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index e744c56705..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3' + version: '1.16.2' }); Npm.depends({ diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index 035af45157..f237879de0 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,28 +4,13 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; -const REMOTE_COLLECTION_METHODS = [ - '_createCappedCollection', - '_dropIndex', - '_ensureIndex', - 'createIndex', - 'countDocuments', - 'dropCollection', - 'estimatedDocumentCount', - 'find', - 'findOne', - 'insert', - 'rawCollection', - 'remove', - 'update', - 'upsert', -]; - Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - REMOTE_COLLECTION_METHODS.forEach( + ['find', 'findOne', 'insert', 'update', 'upsert', + 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', + 'dropCollection', 'rawCollection'].forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index b276e22ce7..11662ebe99 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,224 +62,214 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", - "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", + "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", - "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", + "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" }, "@aws-sdk/client-sso": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", - "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", - "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", + "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" }, "@aws-sdk/client-sts": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", - "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", + "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" }, "@aws-sdk/config-resolver": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", - "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", + "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", - "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", + "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" }, "@aws-sdk/credential-provider-env": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", - "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", + "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", - "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", + "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", - "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", + "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" }, "@aws-sdk/credential-provider-node": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", - "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", + "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" }, "@aws-sdk/credential-provider-process": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", - "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", + "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", - "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", + "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", - "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", + "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" }, "@aws-sdk/credential-providers": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", - "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", + "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", - "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", + "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" }, "@aws-sdk/hash-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", - "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", + "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" }, "@aws-sdk/invalid-dependency": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", - "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", + "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" }, "@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", + "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" }, "@aws-sdk/middleware-content-length": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", - "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", - "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", + "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" }, "@aws-sdk/middleware-host-header": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", - "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", + "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" }, "@aws-sdk/middleware-logger": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", - "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", + "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", - "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", + "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" }, "@aws-sdk/middleware-retry": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", - "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", + "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", - "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", + "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" }, "@aws-sdk/middleware-serde": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", - "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", + "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" }, "@aws-sdk/middleware-signing": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", - "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", + "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" }, "@aws-sdk/middleware-stack": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", - "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", + "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", - "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", + "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" }, "@aws-sdk/node-config-provider": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", - "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", + "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" }, "@aws-sdk/node-http-handler": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", - "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", + "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" }, "@aws-sdk/property-provider": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", - "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", + "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" }, "@aws-sdk/protocol-http": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", - "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", + "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" }, "@aws-sdk/querystring-builder": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", - "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", + "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" }, "@aws-sdk/querystring-parser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", - "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", + "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" }, "@aws-sdk/service-error-classification": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", - "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", + "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", - "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", + "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" }, "@aws-sdk/signature-v4": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", - "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", + "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" }, "@aws-sdk/smithy-client": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", - "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" - }, - "@aws-sdk/token-providers": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", - "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", + "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" }, "@aws-sdk/types": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", - "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", + "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" }, "@aws-sdk/url-parser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", - "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", + "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" }, - "@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" + "@aws-sdk/util-base64-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", + "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" + }, + "@aws-sdk/util-base64-node": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", + "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -287,64 +277,59 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", + "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" }, "@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", + "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" }, "@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", + "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", - "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", + "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", - "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" - }, - "@aws-sdk/util-endpoints": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", - "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", + "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", + "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" }, "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", + "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" }, "@aws-sdk/util-middleware": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", - "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", + "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" }, "@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", + "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", - "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", + "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", - "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", + "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -352,14 +337,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", + "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" }, "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + "version": "18.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", + "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -391,6 +376,11 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -412,14 +402,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", - "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", + "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" }, "mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", + "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" }, "punycode": { "version": "2.1.1", @@ -457,9 +447,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "uuid": { "version": "8.3.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..63696bf272 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.11.0', documentation: null }); Npm.depends({ - mongodb: "4.12.1" + mongodb: "4.11.0" }); Package.onUse(function (api) { diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 1b591a455b..6d7b0cb578 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -136,7 +136,7 @@ OAuth._checkRedirectUrlOrigin = redirectUrl => { ); }; -const middleware = async (req, res, next) => { +const middleware = (req, res, next) => { let requestData; // Make sure to catch any exceptions because otherwise we'd crash @@ -168,7 +168,7 @@ const middleware = async (req, res, next) => { requestData = req.body; } - await handler(service, requestData, res); + handler(service, requestData, res); } catch (err) { // if we got thrown an error, save it off, it will get passed to // the appropriate login call (if any) and reported there. @@ -473,31 +473,3 @@ OAuth.openSecrets = (serviceData, userId) => { ); return result; }; - -OAuth._addValuesToQueryParams = ( - values = {}, - queryParams = new URLSearchParams() -) => { - Object.entries(values).forEach(([key, value]) => { - queryParams.set(key, `${value}`); - }); - return queryParams; -}; - -OAuth._fetch = async ( - url, - method = 'GET', - { headers = {}, queryParams = {}, body, ...options } = {} -) => { - const urlWithParams = new URL(url); - - OAuth._addValuesToQueryParams(queryParams, urlWithParams.searchParams); - - const requestOptions = { - method: method.toUpperCase(), - headers, - ...(body ? { body } : {}), - ...options, - }; - return fetch(urlWithParams.toString(), requestOptions); -}; diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4b56f43d33..8962aeb282 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3" + version: "2.1.2" }); Package.onUse(api => { @@ -11,7 +11,6 @@ Package.onUse(api => { api.use(['reload', 'base64'], 'client'); api.use('oauth-encryption', 'server', {weak: true}); - api.use('fetch', 'server'); api.export('OAuth'); diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index 015553611e..aab9629605 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -19,12 +19,12 @@ export class OAuth1Binding { this._urls = urls; } - async prepareRequestToken(callbackUrl) { + prepareRequestToken(callbackUrl) { const headers = this._buildHeader({ oauth_callback: callbackUrl }); - const response = await this._call({method: 'POST', url: this._urls.requestToken, headers}); + const response = this._call('POST', this._urls.requestToken, headers); const tokens = querystring.parse(response.content); if (! tokens.oauth_callback_confirmed) @@ -35,7 +35,7 @@ export class OAuth1Binding { this.requestTokenSecret = tokens.oauth_token_secret; } - async prepareAccessToken(query, requestTokenSecret) { + prepareAccessToken(query, requestTokenSecret) { // support implementations that use request token secrets. This is // read by this._call. // @@ -50,7 +50,7 @@ export class OAuth1Binding { oauth_verifier: query.oauth_verifier }); - const response = await this._call({ method: 'POST', url: this._urls.accessToken, headers }); + const response = this._call('POST', this._urls.accessToken, headers); const tokens = querystring.parse(response.content); if (! tokens.oauth_token || ! tokens.oauth_token_secret) { @@ -66,7 +66,7 @@ export class OAuth1Binding { this.accessTokenSecret = tokens.oauth_token_secret; } - async callAsync(method, url, params, callback) { + call(method, url, params, callback) { const headers = this._buildHeader({ oauth_token: this.accessToken }); @@ -75,29 +75,14 @@ export class OAuth1Binding { params = {}; } - return this._call({ method, url, headers, params, callback }); - } - - async getAsync(url, params, callback) { - return this.callAsync('GET', url, params, callback); - } - - async postAsync(url, params, callback) { - return this.callAsync('POST', url, params, callback); - } - - call(method, url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. - return Promise.await(this.callAsync(method, url, params, callback)); + return this._call(method, url, headers, params, callback); } get(url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. return this.call('GET', url, params, callback); } post(url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. return this.call('POST', url, params, callback); } @@ -133,7 +118,7 @@ export class OAuth1Binding { return crypto.createHmac('SHA1', signingKey).update(signatureBase).digest('base64'); }; - async _call({method, url, headers = {}, params = {}, callback}) { + _call(method, url, headers = {}, params = {}, callback) { // all URLs to be functions to support parameters/customization if(typeof url === "function") { url = url(this); @@ -156,52 +141,29 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); + // Make signed request - return OAuth._fetch(url, method, { - headers: { - Authorization: authString, - ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}) - }, - ...(method.toUpperCase() === 'POST' ? - { body: OAuth._addValuesToQueryParams(params).toString() } - : { queryParams: params }) - }).then((res) => - res.text().then((content) => { - const responseHeaders = Array.from(res.headers.entries()).reduce( - (acc, [key, val]) => { - return { ...acc, [key.toLowerCase()]: val }; - }, - {} - ); - const data = responseHeaders['content-type'].includes('application/json') ? - JSON.parse(content) : undefined; - return { - content: data ? '' : content, - data, - headers: { ...responseHeaders, nonce: headers.oauth_nonce }, - redirected: res.redirected, - ok: res.ok, - statusCode: res.status, - }; - }) - ) - .then((response) => { - if (callback) { - callback(undefined, response); + try { + const response = HTTP.call(method, url, { + params, + headers: { + Authorization: authString } - return response; - }) - .catch((err) => { - if (callback) { - callback(err); + }, callback && ((error, response) => { + if (! error) { + response.nonce = headers.oauth_nonce; } - console.log({ err }); - throw Object.assign( - new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), - { response: err.response } - ); - }); - } + callback(error, response); + })); + // We store nonce so that JWTs can be validated + if (response) + response.nonce = headers.oauth_nonce; + return response; + } catch (err) { + throw Object.assign(new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), + {response: err.response}); + } + }; _encodeHeader(header) { return Object.keys(header).reduce((memo, key) => { diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index d0c8e3732a..eb54458825 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -6,7 +6,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel Object.assign( redirectUrlObj.query, - whitelistedQueryParams.reduce((prev, param) => + whitelistedQueryParams.reduce((prev, param) => params.query[param] ? { ...prev, param: params.query[param] } : prev, {} ), @@ -25,7 +25,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel }; // connect middleware -OAuth._requestHandlers['1'] = async (service, query, res) => { +OAuth._requestHandlers['1'] = (service, query, res) => { const config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); if (! config) { throw new ServiceConfiguration.ConfigError(service.serviceName); @@ -45,7 +45,7 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { }); // Get a request token to start auth process - await oauthBinding.prepareRequestToken(callbackUrl); + oauthBinding.prepareRequestToken(callbackUrl); // Keep track of request token so we can verify it on the next step OAuth._storeRequestToken( @@ -91,10 +91,10 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { // subsequent call to the `login` method will be immediate. // Get the access token for signing requests - await oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); + oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); // Run service-specific handler. - const oauthResult = await service.handleOauthRequest( + const oauthResult = service.handleOauthRequest( oauthBinding, { query: query }); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index d4b283a97a..a9f266af02 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -1,7 +1,7 @@ import http from 'http'; import { OAuth1Binding } from './oauth1_binding'; -const testPendingCredential = async (test, method) => { +const testPendingCredential = (test, method) => { const twitterfooId = Random.id(); const twitterfooName = `nickname${Random.id()}`; const twitterfooAccessToken = Random.id(); @@ -17,8 +17,8 @@ const testPendingCredential = async (test, method) => { authenticate: "https://example.com/oauth/authenticate" }; - OAuth1Binding.prototype.prepareRequestToken = async () => {}; - OAuth1Binding.prototype.prepareAccessToken = async function() { + OAuth1Binding.prototype.prepareRequestToken = () => {}; + OAuth1Binding.prototype.prepareAccessToken = function() { this.accessToken = twitterfooAccessToken; this.accessTokenSecret = twitterfooAccessTokenSecret; }; @@ -27,7 +27,7 @@ const testPendingCredential = async (test, method) => { try { // register a fake login service - OAuth.registerService(serviceName, 1, urls, async query => ({ + OAuth.registerService(serviceName, 1, urls, query => ({ serviceData: { id: twitterfooId, screenName: twitterfooName, @@ -71,7 +71,7 @@ const testPendingCredential = async (test, method) => { respData += args[0]; return end.apply(this, arguments); }; - await OAuthTest.middleware(req, res); + OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -94,17 +94,17 @@ const testPendingCredential = async (test, method) => { } }; -Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { +Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { OAuthEncryption.loadKey(null); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); }); -Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { +Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 7435caf024..550fdc2448 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1", + version: "1.5.0", }); Package.onUse(api => { @@ -8,7 +8,10 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('check', 'server'); + api.use([ + 'check', + 'http@1.4.4 || 2.0.0' + ], 'server'); api.use('mongo'); diff --git a/packages/oauth2/oauth2_server.js b/packages/oauth2/oauth2_server.js index 86eead93ba..cf990d8691 100644 --- a/packages/oauth2/oauth2_server.js +++ b/packages/oauth2/oauth2_server.js @@ -1,5 +1,5 @@ // connect middleware -OAuth._requestHandlers['2'] = async (service, query, res) => { +OAuth._requestHandlers['2'] = (service, query, res) => { let credentialSecret; // check if user authorized access @@ -7,7 +7,7 @@ OAuth._requestHandlers['2'] = async (service, query, res) => { // Prepare the login results before returning. // Run service-specific handler. - const oauthResult = await service.handleOauthRequest(query); + const oauthResult = service.handleOauthRequest(query); credentialSecret = Random.secret(); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth2/oauth2_tests.js b/packages/oauth2/oauth2_tests.js index 49b94f4eb0..1ce47813b4 100644 --- a/packages/oauth2/oauth2_tests.js +++ b/packages/oauth2/oauth2_tests.js @@ -1,6 +1,6 @@ import http from 'http'; -const testPendingCredential = async function (test, method) { +const testPendingCredential = function (test, method) { const foobookId = Random.id(); const foobookOption1 = Random.id(); const credentialToken = Random.id(); @@ -51,7 +51,7 @@ const testPendingCredential = async function (test, method) { return end.apply(this, args); }; - await OAuthTest.middleware(req, res); + OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -72,17 +72,17 @@ const testPendingCredential = async function (test, method) { } }; -Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { +Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { OAuthEncryption.loadKey(null); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); }); -Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { +Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4ba099aa41..c5f2fd0917 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2", + version: "1.3.1", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index ff82ae9086..855dc56057 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - invalidVersions.forEach(function (v) { + _.each(invalidVersions, function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - validVersions.forEach(function (v) { + _.each(validVersions, function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 78a084498d..4c6ff0dc62 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1" + version: "3.2.0" }); Npm.depends({ @@ -14,6 +14,7 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use(['package-version-parser', 'tinytest']); + api.use('package-version-parser'); + api.use(['tinytest', 'underscore']); api.addFiles('package-version-parser-tests.js', 'server'); }); diff --git a/packages/promise/package.js b/packages/promise/package.js index fcf72881c5..181ef21b3b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2", + version: "0.12.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/promise/server.js b/packages/promise/server.js index 2f5f59a3c0..e07faeb52b 100644 --- a/packages/promise/server.js +++ b/packages/promise/server.js @@ -1,13 +1,11 @@ require("./extensions.js"); -if (!process.env.DISABLE_FIBERS) { - require("meteor-promise").makeCompatible( - Promise, - // Allow every Promise callback to run in a Fiber drawn from a pool of - // reusable Fibers. - require("fibers") - ); -} +require("meteor-promise").makeCompatible( + Promise, + // Allow every Promise callback to run in a Fiber drawn from a pool of + // reusable Fibers. + require("fibers") +); // Reference: https://caniuse.com/#feat=promises require("meteor/modern-browsers").setMinimumBrowserVersions({ diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 7d6b2746e9..97e0d8f3eb 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3', + version: '1.8.2', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/standard-minifier-css/plugin/minify-css.js b/packages/standard-minifier-css/plugin/minify-css.js index 8ac2b0db75..2b8c4d5e44 100644 --- a/packages/standard-minifier-css/plugin/minify-css.js +++ b/packages/standard-minifier-css/plugin/minify-css.js @@ -60,7 +60,7 @@ class CssToolsMinifier { path: 'merged-stylesheets.css' }]; } else { - const minifiedFiles = await CssTools.minifyCssAsync(merged.code); + const minifiedFiles = CssTools.minifyCss(merged.code); result = minifiedFiles.map(minified => ({ data: minified diff --git a/packages/test-helpers/async_multi.js b/packages/test-helpers/async_multi.js index 04be6aedfe..e5ec3cb43c 100644 --- a/packages/test-helpers/async_multi.js +++ b/packages/test-helpers/async_multi.js @@ -142,13 +142,8 @@ testAsyncMulti = function (name, funcs, { isOnly = false } = {}) { test.extraDetails.asyncBlock = i++; new Promise(resolve => { - const result = func.apply(context, [test, _.bind(em.expect, em)]); - if (result && typeof result.then === "function") { - return result.then((r) => resolve(r)) - } - - return resolve(result); - }).then(() => { + resolve(func.apply(context, [test, _.bind(em.expect, em)])); + }).then(result => { em.done(); }, exception => { if (em.cancel()) { @@ -196,24 +191,3 @@ pollUntil = function (expect, f, timeout, step, noFail) { step ); }; - -/** - * Helper that is used on the async tests. - * Just run the function and assert if we have an error or not. - * @param fn - * @param test - * @param shouldErrorOut - * @returns {Promise<*>} - */ -runAndThrowIfNeeded = async (fn, test, shouldErrorOut) => { - let err, result; - try { - result = await fn(); - } catch (e) { - err = e; - } - - test[shouldErrorOut ? "isTrue" : "isFalse"](err); - - return result; -}; diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..17b6e0f37a 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.0' }); Package.onUse(function (api) { @@ -28,8 +28,7 @@ Package.onUse(function (api) { 'SeededRandom', 'clickElement', 'blurElement', 'focusElement', 'simulateEvent', 'getStyleProperty', 'canonicalizeHtml', 'renderToDiv', 'clickIt', - 'withCallbackLogger', 'testAsyncMulti', - 'simplePoll', 'runAndThrowIfNeeded', + 'withCallbackLogger', 'testAsyncMulti', 'simplePoll', 'makeTestConnection', 'DomUtils']); api.addFiles('try_all_permutations.js'); diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index b8fb0a9ecf..d0d5fa4423 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e.type != "finish"; + return e[type] != "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); +}); \ No newline at end of file diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 57e3474024..a090172f76 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2', + version: '1.3.1', documentation: null }); diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index c6509bd93d..a2d07f633f 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,16 +1,12 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); -let testNumber = 0; - async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - // this is a way to make sure the travis does not timeout - // if the test is running for too long without any output to the console (10 minutes) - if (msg._text !== undefined) console.log(msg._text); - else console.log(`Test number: ${ testNumber }`); - testNumber++; + if (msg._text !== undefined) { + console.log(msg._text); + } }); if (!process.env.URL) { @@ -23,15 +19,11 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(` - The number of tests from Test number may be different because - of the way the test is written. causing the test to fail or - to run more than once. in the console. Test number total: ${ testNumber }`); - console.log(`Tests complete with ${ failCount } failures`); - console.log(`Tests complete with ${ await getPassCount(page) } passes`); + console.log(`Tests complete with ${failCount} failures`); + console.log(`Tests complete with ${await getPassCount(page)} passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); + failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); await page.close(); await browser.close(); process.exit(1); @@ -54,7 +46,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -69,7 +61,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -84,7 +76,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -103,7 +95,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -112,11 +104,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${ process.env.URL }`); + console.log(`Running test with Puppeteer at ${process.env.URL}`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${ await browser.version() }`); + console.log(`Using version: ${await browser.version()}`); runNextUrl(browser); } diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 21a7a053f3..862749494b 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2' + version: '1.2.1' }); Package.onUse(function (api) { diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index f5cd025b98..045548c6de 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -1,3 +1,5 @@ +const Future = Meteor.isServer && require('fibers/future'); + /******************************************************************************/ /* TestCaseResults */ /******************************************************************************/ @@ -184,43 +186,6 @@ export class TestCaseResults { this.ok(); } - _assertActual(actual, predicate, message) { - if (actual && predicate(actual)) - this.ok(); - else - this.fail({ - type: "throws", - message: (actual ? - "wrong error thrown: " + actual.message : - "did not throw an error as expected") + (message ? ": " + message : ""), - }); - } - - _guessPredicate(expected) { - let predicate; - - if (expected === undefined) { - predicate = function () { - return true; - }; - } else if (typeof expected === "string") { - predicate = function (actual) { - return typeof actual.message === "string" && - actual.message.indexOf(expected) !== -1; - }; - } else if (expected instanceof RegExp) { - predicate = function (actual) { - return expected.test(actual.message); - }; - } else if (typeof expected === 'function') { - predicate = expected; - } else { - throw new Error('expected should be a string, regexp, or predicate function'); - } - - return predicate; - } - // expected can be: // undefined: accept any exception. // string: pass if the string is a substring of the exception message. @@ -239,8 +204,26 @@ export class TestCaseResults { // particular class, use a predicate function. // throws(f, expected, message) { - let actual; - const predicate = this._guessPredicate(expected); + var actual, predicate; + + if (expected === undefined) { + predicate = function (actual) { + return true; + }; + } else if (typeof expected === "string") { + predicate = function (actual) { + return typeof actual.message === "string" && + actual.message.indexOf(expected) !== -1; + }; + } else if (expected instanceof RegExp) { + predicate = function (actual) { + return expected.test(actual.message); + }; + } else if (typeof expected === 'function') { + predicate = expected; + } else { + throw new Error('expected should be a string, regexp, or predicate function'); + } try { f(); @@ -248,27 +231,15 @@ export class TestCaseResults { actual = exception; } - this._assertActual(actual, predicate, message); - } - - /** - * Same as throw, but accepts an async function as a parameter. - * @param f - * @param expected - * @param message - * @returns {Promise} - */ - async throwsAsync(f, expected, message) { - let actual; - const predicate = this._guessPredicate(expected); - - try { - await f(); - } catch (exception) { - actual = exception; - } - - this._assertActual(actual, predicate, message); + if (actual && predicate(actual)) + this.ok(); + else + this.fail({ + type: "throws", + message: (actual ? + "wrong error thrown: " + actual.message : + "did not throw an error as expected") + (message ? ": " + message : ""), + }); } isTrue(v, msg) { @@ -338,7 +309,7 @@ export class TestCaseResults { pass = true; } } else { - /* fail -- not something that contains other things */ + /* fail -- not something that contains other things */; } if (pass === ! not) { @@ -575,37 +546,37 @@ export class TestRun { } if (Meteor.isServer) { + // On the server, ensure that only one test runs at a time, even + // with multiple clients. this.manager.testQueue.queueTask(() => { - // On the server, ensure that only one test runs at a time, even - // with multiple clients. - let hasRan = false; - const timeoutPromise = new Promise((resolve) => { - Meteor.setTimeout(() => { - if (!hasRan) { - test.timedOut = true; - this._report(test, { - type: "exception", - details: { - message: "test timed out" - } - }); - } - - resolve(); - }, 3 * 60 * 1000); - }); - const runnerPromise = new Promise((resolve) => { - this._runTest(test, () => { - if (!hasRan) { - hasRan = true; - } - resolve(); - }, stop_at_offset); - }); - - Promise.race([runnerPromise, timeoutPromise]).finally(() => { - onComplete && onComplete(); - }); + // The future resolves when the test completes or times out. + var future = new Future(); + Meteor.setTimeout( + () => { + if (future.isResolved()) + // If the future has resolved the test has completed. + return; + test.timedOut = true; + this._report(test, { + type: "exception", + details: { + message: "test timed out" + } + }); + future['return'](); + }, + 3 * 60 * 1000 // 3 minutes + ); + this._runTest(test, () => { + // The test can complete after it has timed out (it might + // just be slow), so only resolve the future if the test + // hasn't timed out. + if (! future.isResolved()) + future['return'](); + }, stop_at_offset); + // Wait for the test to complete or time out. + future.wait(); + onComplete && onComplete(); }); } else { // client diff --git a/packages/tinytest/tinytest_server.js b/packages/tinytest/tinytest_server.js index 331a7007e7..c43fb12b34 100644 --- a/packages/tinytest/tinytest_server.js +++ b/packages/tinytest/tinytest_server.js @@ -9,7 +9,7 @@ import { export { Tinytest }; -const Fiber = Meteor._isFibersEnabled && require('fibers'); +const Fiber = require('fibers'); const handlesForRun = new Map; const reportsForRun = new Map; @@ -58,7 +58,7 @@ Meteor.methods({ } function onReport(report) { - if (Fiber && !Fiber.current) { + if (! Fiber.current) { Meteor._debug("Trying to report a test not in a fiber! "+ "You probably forgot to wrap a callback in bindEnvironment."); console.trace(); diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 62d7646ca8..6a8bd6793b 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2' + version: '1.3.1' }); Package.onUse(function(api) { diff --git a/packages/twitter-oauth/twitter_server.js b/packages/twitter-oauth/twitter_server.js index 090d455172..6a973ac57d 100644 --- a/packages/twitter-oauth/twitter_server.js +++ b/packages/twitter-oauth/twitter_server.js @@ -15,9 +15,9 @@ var urls = { // https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials Twitter.whitelistedFields = ['profile_image_url', 'profile_image_url_https', 'lang', 'email']; -OAuth.registerService('twitter', 1, urls, async function(oauthBinding) { - const response = await oauthBinding.getAsync('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true'); - const { data: identity } = response; +OAuth.registerService('twitter', 1, urls, function(oauthBinding) { + var identity = oauthBinding.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true').data; + var serviceData = { id: identity.id_str, screenName: identity.screen_name, diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..df071432b9 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.5.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e2de8dd3ba..02cea0b9c6 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2", + version: "1.3.1", }); Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); + api.use('http@1.4.4 || 2.0.0', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); diff --git a/packages/weibo-oauth/weibo_server.js b/packages/weibo-oauth/weibo_server.js index 24d56438fd..539022aa8d 100644 --- a/packages/weibo-oauth/weibo_server.js +++ b/packages/weibo-oauth/weibo_server.js @@ -1,8 +1,8 @@ Weibo = {}; -OAuth.registerService('weibo', 2, null, async query => { +OAuth.registerService('weibo', 2, null, query => { - const response = await getTokenResponse(query); + const response = getTokenResponse(query); const uid = parseInt(response.uid, 10); // different parts of weibo's api seem to expect numbers, or strings @@ -11,7 +11,7 @@ OAuth.registerService('weibo', 2, null, async query => { throw new Error(`Expected 'uid' to parse to an integer: ${JSON.stringify(response)}`); } - const identity = await getIdentity(response.access_token, uid); + const identity = getIdentity(response.access_token, uid); return { serviceData: { @@ -31,48 +31,46 @@ OAuth.registerService('weibo', 2, null, async query => { // - uid // - access_token // - expires_in: lifetime of this token in seconds (5 years(!) right now) -const getTokenResponse = async (query) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'weibo', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = query => { + const config = ServiceConfiguration.configurations.findOne({service: 'weibo'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); - return OAuth._fetch('https://api.weibo.com/oauth2/access_token', 'POST', { - queryParams: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('weibo', config, null, { - replaceLocalhost: true, - }), - grant_type: 'authorization_code', - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Weibo. ${err.message}` - ), - { response: err.response } - ); - }); + let response; + try { + response = HTTP.post( + "https://api.weibo.com/oauth2/access_token", {params: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('weibo', config, null, {replaceLocalhost: true}), + grant_type: 'authorization_code' + }}); + } catch (err) { + throw Object.assign(new Error(`Failed to complete OAuth handshake with Weibo. ${err.message}`), + {response: err.response}); + } + + // result.headers["content-type"] is 'text/plain;charset=UTF-8', so + // the http package doesn't automatically populate result.data + response.data = JSON.parse(response.content); + + if (response.data.error) { // if the http response was a json object with an error attribute + throw new Error(`Failed to complete OAuth handshake with Weibo. ${response.data.error}`); + } else { + return response.data; + } }; -const getIdentity = async (accessToken, userId) => { - return OAuth._fetch('https://api.weibo.com/2/users/show.json', 'GET', { - queryParams: { - access_token: accessToken, - uid: userId, - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error('Failed to fetch identity from Weibo. ' + err.message), - { response: err.response } - ); - }); +const getIdentity = (accessToken, userId) => { + try { + return HTTP.get( + "https://api.weibo.com/2/users/show.json", + {params: {access_token: accessToken, uid: userId}}).data; + } catch (err) { + throw Object.assign(new Error("Failed to fetch identity from Weibo. " + err.message), + {response: err.response}); + } }; Weibo.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index acce35a806..e475269aa6 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.8.1-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 27a0c865e4..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c265734f8a..ce78281faa 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.2-beta.0", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 6a5c4d071c..2c8f3ff4e2 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); + main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 22ffdebaeb..4a726cb3f3 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -12,13 +12,6 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; -const { - blue, - green, - purple, - red, - yellow -} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -540,14 +533,12 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, - 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, - prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -556,13 +547,7 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - if (options.prototype) { - Console.error( - `The ${Console.command('--prototype')} option is no longer supported for packages.` - ); - Console.error(); - throw new main.ShowUsage; - } + if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); @@ -805,22 +790,6 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { - - // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file - if ((/packages/).test(f)) { - - const prototypePackages = - () => - 'autopublish # Publish all data to the clients (for prototyping)\n' + - 'insecure # Allow all DB writes from clients (for prototyping)'; - - // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else - if (options.prototype) { - return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) - } else { - return Buffer.from(contents.toString().replace(/~prototype~/g, '')) - } - } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { @@ -936,8 +905,7 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue3-based app"); - cmd("meteor create --vue-2 # to create a basic Vue2-based app"); + cmd("meteor create --vue # to create a basic Vue-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); @@ -2540,298 +2508,6 @@ main.registerCommand({ }); -/////////////////////////////////////////////////////////////////////////////// -// generate -/////////////////////////////////////////////////////////////////////////////// - -/** - * - * @param question - * @returns {function(string): Promise} - */ -const createPrompt = () => { - const readline = require('readline') - .createInterface({ input: process.stdin, output: process.stdout }); - return async (question) => new Promise((resolve, reject) => { - readline.question(question, (answer) => { - resolve(answer); - }) - }) -} - -const sanitizeBoolAnswer = (string) => { - if (string === '') return true; - - if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; - - if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; - - Console.error(red('You must provide a valid answer')); - Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); - throw new main.ExitWithCode(2); -} - -/** - * simple verification for the name - * @param scaffoldName {string} - */ -const checkScaffoldName = (scaffoldName) => { - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model.')); - Console.error(yellow('Model names should not be empty.')); - throw new main.ExitWithCode(2); - } - - if (scaffoldName.includes('/')) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Model names should not contain slashes.')); - throw new main.ExitWithCode(2); - } - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Model names should not contain special characters except _ and -')); - throw new main.ExitWithCode(2); - } -} - -main.registerCommand({ - name: 'generate', - maxArgs: 1, - minArgs: 0, - options: { - path: { type: String }, - methods: { type: Boolean }, - publications: { type: Boolean }, - templatePath : { type: String }, - replaceFn : { type: String }, - }, - pretty: false, - catalogRefresh: new catalog.Refresh.Never() -}, async function (options) { - const { args, appDir } = options; - - const setup = async (arg0) => { - if (arg0 === undefined) { - const ask = createPrompt(); - // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors - const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); - checkScaffoldName(scaffoldName); - const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); - const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); - const publications = sanitizeBoolAnswer(arePublications); - const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); - return { - isWizard: true, - scaffoldName, - path, - methods, - publications, - } - } - - const { - path, - methods, - publications - } = options; - - return { - isWizard: false, - scaffoldName: arg0, - path, - methods, - publications, - } - } - /** - * @type{string} - */ - const { - isWizard, - scaffoldName, - path, - methods, - publications - } = await setup(args[0]); - - checkScaffoldName(scaffoldName); - // get directory where we will place our files - const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; - - /** - * - * @param appDir - * @returns {string[]} - */ - const getFilesInDir = (appDir) => { - const appPath = files.pathResolve(appDir); - return files.readdir(appPath); - } - - const getExtension = () => { - const rootFiles = getFilesInDir(appDir); - if (rootFiles.includes('tsconfig.json')) return 'ts' - else return 'js' - } - - /** - * - * @returns {string} - */ - const userTransformFilenameFn = (filename) => { - const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); - const replaceFn = require(path).transformFilename; - if (typeof replaceFn !== 'function') { - Console.error(red('You must provide a valid function transformFilename.')); - Console.error(yellow('The function should be named transformFilename and should be exported.')); - throw new main.ExitWithCode(2); - } - return replaceFn(scaffoldName, filename); - } - /** - * - * @returns {string} - */ - const userTransformContentsFn = (contents, fileName) => { - const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); - const replaceFn = require(path).transformContents; - if (typeof replaceFn !== 'function') { - Console.error(red('You must provide a valid function transformContents.')); - Console.error(yellow('The function should be named transformContents and should be exported.')); - throw new main.ExitWithCode(2); - } - return replaceFn(scaffoldName, contents, fileName); - } - - /** - * if contains - turns into pascal - * @param str{string} - * @returns {string} - */ - const toPascalCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); - } - const toCamelCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); - } - - /** - * - * @param name {string} - */ - const transformName = (name) => { - return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { - if (substring === '$$name$$') return scaffoldName; - if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); - if (substring === '$$camelName$$') return toCamelCase(scaffoldName); - }) - } - - /** - * - * @param content{string} - * @param fileName{string} - * @returns {string} - */ - const removeUnusedLines = (content, fileName) => { - if (methods && publications) return content; - if (!methods && !publications) return content; - if(!fileName.startsWith('index')) return content; - return content - .split('\n') - .filter(line => { - if (!methods && line.includes('methods')) return false; - if (!publications && line.includes('publications')) return false; - return true; - }) - .join('\n'); - } - /// Program - const rootFiles = getFilesInDir(appDir); - if (!rootFiles.includes('.meteor')) { - Console.error(red('You must be in a Meteor project to run this command')); - Console.error(yellow('You can create a new Meteor project with `meteor create`')); - throw new main.ExitWithCode(2); - } - - const extension = getExtension() - const assetsPath = () => { - if (options.templatePath){ - const templatePath = files.pathJoin(appDir, options.templatePath) - Console.info(`Using template that is in: ${purple(templatePath)}`) - return templatePath; - } - return files.pathJoin( - __dirnameConverted, - '..', - 'static-assets', - `scaffolds-${ extension }`) - } - // create directory - const isOk = files.mkdir_p(scaffoldPath); - if (!isOk) { - Console.error(red('Something went wrong when creating the folder')); - Console.error(yellow('Do you have the correct permissions?')); - throw new main.ExitWithCode(2); - } - - files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { - transformFilename: function (f) { - if (options.replaceFn) return userTransformFilenameFn(f); - return transformName(f); - }, - transformContents: function (contents, fileName) { - if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); - const cleaned = removeUnusedLines(contents.toString(), fileName); - return transformName(cleaned); - } - }) - - const checkAndRemoveFiles = () => { - if (!methods) - files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); - - if (!publications) - files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); - } - - const xor = (a, b) => ( a || b ) && !( a && b ); - - if (!isWizard && xor(methods, publications)) { - checkAndRemoveFiles() - } - - if (isWizard) { - checkAndRemoveFiles() - } - - const packageJsonPath = files.pathJoin(appDir, 'package.json'); - const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); - const packageJson = JSON.parse(packageJsonFile); - - const mainJsPath = - packageJson?.meteor?.mainModule?.server - ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) - : files.pathJoin(appDir, 'server', 'main.js'); - const mainJs = files.readFile(mainJsPath); - const mainJsLines = mainJs.toString().split('\n'); - const importLine = path - ? `import '${path}';` - : `import '/imports/api/${ scaffoldName }';` - const mainJsFile = [importLine, ...mainJsLines].join('\n'); - files.writeFile(mainJsPath, mainJsFile); - - Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); - - return 0; -}); - - /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 71b63daf23..8091e7b025 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,8 +183,7 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue3-based app. - --vue-2 Create a basic vue2-based app. + --vue Create a basic vue-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. @@ -192,7 +191,6 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. - --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update @@ -843,34 +841,6 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` ->>> generate - -Generate boilerplate code for a MeteorJS RPC api. -It generates a collection with the name you pass and its methods. -Is JS and TS compatible. No collection name -runs the wizard. - -Usage: meteor generate [] [options] - -By default, generates a collection.ts|js file with the name you pass, -methods(insert, update, remove, find, findOne) in a methods.js|ts file -and publications.js|ts. If you just use the command without collectionName, -it will generate run the wizard, asking you what is necessary. - -We do have as well the templatePath, wich uses the template you pass to generate -the boilerplate code. You can use the default template or create your own. -for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. - -This is a MeteorJS project command. - -Options: - --help Show help. - --path The path to the folder where the files will be generated. Default is the current folder. - --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. - --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. - --methods Generate methods. - --publications Generate publications. - >>> publish-release Publish a new meteor release to the package server. diff --git a/tools/console/console.js b/tools/console/console.js index 7715560354..16ebd55da9 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,19 +1320,4 @@ class Console extends ConsoleBase { } } -const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; -const red = (text) => `\x1b[31m${ text }\x1b[0m`; -const purple = (text) => `\x1b[35m${ text }\x1b[0m`; -const green = (text) => `\x1b[32m${ text }\x1b[0m`; -const blue = (text) => `\x1b[34m${ text }\x1b[0m`; - -const colors = { - yellow, - red, - purple, - green, - blue, -}; - -exports.colors = colors; exports.Console = new Console; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 3075970647..78af222cfd 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,6 +809,7 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. + // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index 1884abb1d6..db232e18af 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,14 +40,6 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. -## skel-vue - Package Skeleton - -Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. - -## skel-vue-2 - Package Skeleton - -Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. - ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js deleted file mode 100644 index a8a92d7cde..0000000000 --- a/tools/static-assets/scaffolds-js/collection.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js deleted file mode 100644 index 59951d14bb..0000000000 --- a/tools/static-assets/scaffolds-js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './collection'; -export * from './methods'; -export * from './publications'; diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js deleted file mode 100644 index 415f0ebb0a..0000000000 --- a/tools/static-assets/scaffolds-js/methods.js +++ /dev/null @@ -1,29 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; -import { $$PascalName$$Collection } from './collection'; - -export async function create(data) { - return $$PascalName$$Collection.insertAsync({ ...data }); -} - -export async function update(_id, data) { - check(_id, String); - return $$PascalName$$Collection.updateAsync(_id, { ...data }); -} - -export async function remove(_id) { - check(_id, String); - return $$PascalName$$Collection.removeAsync(_id); -} - -export async function findById(_id) { - check(_id, String); - return $$PascalName$$Collection.findOneAsync(_id); -} - -Meteor.methods({ - '$$PascalName$$.create': create, - '$$PascalName$$.update': update, - '$$PascalName$$.remove': remove, - '$$PascalName$$.find': findById -}); diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js deleted file mode 100644 index 7e3a996634..0000000000 --- a/tools/static-assets/scaffolds-js/publications.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { $$PascalName$$Collection } from './collection'; - -Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { - return $$PascalName$$Collection.find({}); -}); diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts deleted file mode 100644 index f579cd71a2..0000000000 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export type $$PascalName$$ = { - _id?: string; - name: string; - createdAt: Date; -} - -export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts deleted file mode 100644 index 59951d14bb..0000000000 --- a/tools/static-assets/scaffolds-ts/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './collection'; -export * from './methods'; -export * from './publications'; diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts deleted file mode 100644 index d36e1cd42c..0000000000 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Mongo } from 'meteor/mongo'; -import { check } from 'meteor/check'; -import { $$PascalName$$, $$PascalName$$Collection } from './collection'; - -export async function create(data: $$PascalName$$) { - return $$PascalName$$Collection.insertAsync({ ...data }); -} - -export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { - check(_id, String); - return $$PascalName$$Collection.updateAsync(_id, { ...data }); -} - -export async function remove(_id: string) { - check(_id, String); - return $$PascalName$$Collection.removeAsync(_id); -} - -export async function findById(_id: string) { - check(_id, String); - return $$PascalName$$Collection.findOneAsync(_id); -} - -Meteor.methods({ - '$$PascalName$$.create': create, - '$$PascalName$$.update': update, - '$$PascalName$$.remove': remove, - '$$PascalName$$.find': findById -}); diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts deleted file mode 100644 index 818932bba3..0000000000 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Meteor, Subscription } from 'meteor/meteor'; -import { $$PascalName$$Collection } from './collection'; - -Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { - return $$PascalName$$Collection.find({}); -}); diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index 0addfea192..caa775ee6f 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ + static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 294120e852..62bedd2c00 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library -~prototype~ + standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index 5e929125ff..c2506a81ed 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,7 +19,8 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 42dd3fa370..8f6a2ce1df 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,7 +11,6 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library -~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index d0998cd7ad..60ed1976b3 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,4 +15,3 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server -~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index 492b563f76..d6c05d244b 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 6880ea240a..0e3c38c047 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,7 +16,8 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index 76457880f7..c7c54d5cc4 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.4" + "typescript": "^4.6.3" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-vue-2/.gitignore b/tools/static-assets/skel-vue-2/.gitignore deleted file mode 100644 index c2658d7d1b..0000000000 --- a/tools/static-assets/skel-vue-2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/tools/static-assets/skel-vue-2/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/tools/static-assets/skel-vue-2/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages deleted file mode 100644 index 83be6b3a62..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/packages +++ /dev/null @@ -1,24 +0,0 @@ -# Meteor packages used by this project, one per line. -# Check this file (and the other files in this directory) into your repository. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -meteor-base # Packages every Meteor app needs to have -mobile-experience # Packages for a great mobile UX -mongo # The database Meteor supports right now -reactive-var # Reactive variable for tracker - -standard-minifier-css # CSS minifier run for production mode -standard-minifier-js # JS minifier run for production mode -es5-shim # ECMAScript 5 compatibility for older browsers -ecmascript # Enable ECMAScript2015+ syntax in app code -typescript # Enable TypeScript syntax in .ts and .tsx modules -shell-server # Server-side component of the `meteor shell` command - -tracker # Dependency tracker to allow reactive callbacks -static-html # Define static page content in .html files -akryum:vue-component # Vue-CLI template to publish components - -meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha -johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue-2/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms deleted file mode 100644 index efeba1b50c..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/platforms +++ /dev/null @@ -1,2 +0,0 @@ -server -browser diff --git a/tools/static-assets/skel-vue-2/client/main.html b/tools/static-assets/skel-vue-2/client/main.html deleted file mode 100644 index 99c3dfb74c..0000000000 --- a/tools/static-assets/skel-vue-2/client/main.html +++ /dev/null @@ -1,7 +0,0 @@ - - ~name~ - - - -
- diff --git a/tools/static-assets/skel-vue-2/client/main.js b/tools/static-assets/skel-vue-2/client/main.js deleted file mode 100644 index 665c6aa1b1..0000000000 --- a/tools/static-assets/skel-vue-2/client/main.js +++ /dev/null @@ -1,12 +0,0 @@ -import Vue from 'vue' - -import '../imports/ui/plugins' - -import App from '../imports/ui/App.vue' - -Meteor.startup(() => { - new Vue({ - el: '#app', - ...App, - }) -}) diff --git a/tools/static-assets/skel-vue-2/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue deleted file mode 100644 index e126098ccb..0000000000 --- a/tools/static-assets/skel-vue-2/imports/ui/App.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/tools/static-assets/skel-vue-2/package.json b/tools/static-assets/skel-vue-2/package.json deleted file mode 100644 index e8cfe3ee72..0000000000 --- a/tools/static-assets/skel-vue-2/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "~name~", - "private": true, - "scripts": { - "start": "meteor run", - "test": "meteor test --once --driver-package meteortesting:mocha", - "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", - "visualize": "meteor --production --extra-packages bundle-visualizer" - }, - "dependencies": { - "@babel/runtime": "^7.17.9", - "meteor-node-stubs": "^1.2.1", - "vue": "^2.6.14", - "vue-meteor-tracker": "^2.0.0-beta.5" - }, - "meteor": { - "mainModule": { - "client": "client/main.js", - "server": "server/main.js" - }, - "testModule": "tests/main.js" - } -} diff --git a/tools/static-assets/skel-vue-2/server/main.js b/tools/static-assets/skel-vue-2/server/main.js deleted file mode 100644 index 42950618b6..0000000000 --- a/tools/static-assets/skel-vue-2/server/main.js +++ /dev/null @@ -1,3 +0,0 @@ -import '../imports/api/fixtures' -import '../imports/api/methods' -import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue-2/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js deleted file mode 100644 index 6d2a32e09d..0000000000 --- a/tools/static-assets/skel-vue-2/tests/main.js +++ /dev/null @@ -1,20 +0,0 @@ -import assert from "assert"; - -describe("skel", function () { - it("package.json has correct name", async function () { - const { name } = await import("../package.json"); - assert.strictEqual(name, "skel"); - }); - - if (Meteor.isClient) { - it("client is not server", function () { - assert.strictEqual(Meteor.isServer, false); - }); - } - - if (Meteor.isServer) { - it("server is not client", function () { - assert.strictEqual(Meteor.isClient, false); - }); - } -}); diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders deleted file mode 100644 index c07b6ff75a..0000000000 --- a/tools/static-assets/skel-vue/.meteor/.finished-upgraders +++ /dev/null @@ -1,19 +0,0 @@ -# This file contains information which helps Meteor properly upgrade your -# app when you run 'meteor update'. You should check it into version control -# with your project. - -notices-for-0.9.0 -notices-for-0.9.1 -0.9.4-platform-file -notices-for-facebook-graph-api-2 -1.2.0-standard-minifiers-package -1.2.0-meteor-platform-split -1.2.0-cordova-changes -1.2.0-breaking-changes -1.3.0-split-minifiers-package -1.4.0-remove-old-dev-bundle-link -1.4.1-add-shell-server-package -1.4.3-split-account-service-packages -1.5-add-dynamic-import-package -1.7-split-underscore-from-meteor-base -1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id deleted file mode 100644 index dd363b2513..0000000000 --- a/tools/static-assets/skel-vue/.meteor/.id +++ /dev/null @@ -1,7 +0,0 @@ -# This file contains a token that is unique to your project. -# Check it into your repository along with the rest of this directory. -# It can be used for purposes such as: -# - ensuring you don't accidentally deploy one app on top of another -# - providing package authors with aggregated statistics - -kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 2565a5fe32..83be6b3a62 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -4,18 +4,21 @@ # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base@1.5.1 # Packages every Meteor app needs to have -mobile-experience@1.1.0 # Packages for a great mobile UX -mongo@1.16.0 # The database Meteor supports right now -reactive-var@1.0.11 # Reactive variable for tracker +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker -standard-minifier-css@1.8.2 # CSS minifier run for production mode -standard-minifier-js@2.8.1 # JS minifier run for production mode -es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers -ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code -typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules -shell-server@0.5.0 # Server-side component of the `meteor shell` command -hot-module-replacement@0.5.1 # Update client in development without reloading the page +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command -static-html@1.3.2 # Define static page content in .html files -vite:bundler +tracker # Dependency tracker to allow reactive callbacks +static-html # Define static page content in .html files +akryum:vue-component # Vue-CLI template to publish components + +meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha +johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release deleted file mode 100644 index 1d2a6d0f79..0000000000 --- a/tools/static-assets/skel-vue/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions deleted file mode 100644 index 3b89f7359b..0000000000 --- a/tools/static-assets/skel-vue/.meteor/versions +++ /dev/null @@ -1,71 +0,0 @@ -allow-deny@1.1.1 -autoupdate@1.8.0 -babel-compiler@7.9.2 -babel-runtime@1.5.1 -base64@1.0.12 -binary-heap@1.0.11 -blaze-tools@1.1.3 -boilerplate-generator@1.7.1 -caching-compiler@1.2.2 -caching-html-compiler@1.2.1 -callback-hook@1.4.0 -check@1.3.1 -ddp@1.4.0 -ddp-client@2.6.0 -ddp-common@1.4.0 -ddp-server@2.6.0 -diff-sequence@1.1.1 -dynamic-import@0.7.2 -ecmascript@0.16.2 -ecmascript-runtime@0.8.0 -ecmascript-runtime-client@0.12.1 -ecmascript-runtime-server@0.11.0 -ejson@1.1.2 -es5-shim@4.8.0 -fetch@0.1.1 -geojson-utils@1.0.10 -hot-code-push@1.0.4 -hot-module-replacement@0.5.1 -html-tools@1.1.3 -htmljs@1.1.1 -id-map@1.1.1 -inter-process-messaging@0.1.1 -launch-screen@1.3.0 -logging@1.3.1 -meteor@1.10.1 -meteor-base@1.5.1 -minifier-css@1.6.1 -minifier-js@2.7.5 -minimongo@1.9.0 -mobile-experience@1.1.0 -mobile-status-bar@1.1.0 -modern-browsers@0.1.8 -modules@0.19.0 -modules-runtime@0.13.0 -modules-runtime-hot@0.14.0 -mongo@1.16.0 -mongo-decimal@0.1.3 -mongo-dev-server@1.1.0 -mongo-id@1.0.8 -npm-mongo@4.9.0 -ordered-dict@1.1.0 -promise@0.12.0 -random@1.2.0 -react-fast-refresh@0.2.3 -reactive-var@1.0.11 -reload@1.3.1 -retry@1.1.0 -routepolicy@1.1.1 -shell-server@0.5.0 -socket-stream-client@0.5.0 -spacebars-compiler@1.3.1 -standard-minifier-css@1.8.2 -standard-minifier-js@2.8.1 -static-html@1.3.2 -templating-tools@1.2.2 -tracker@1.2.0 -typescript@4.5.4 -underscore@1.0.10 -vite:bundler@0.1.9 -webapp@1.13.1 -webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md deleted file mode 100644 index 7ba6226cb0..0000000000 --- a/tools/static-assets/skel-vue/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Meteor + Vue3 + Vite - -This is a simple example of how to use Vue3 with Meteor. - -## How to use - -1. Clone this repo -2. Run `meteor npm install` -3. Run `meteor` -4. Open `http://localhost:3000` in your browser - -## Libraries used - -- [Vue3](https://v3.vuejs.org/) -- [Vite](https://vitejs.dev/) -- [Vue Router](https://next.router.vuejs.org/) -- [Meteor](https://www.meteor.com/) -- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) -- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css deleted file mode 100644 index b5c61c9567..0000000000 --- a/tools/static-assets/skel-vue/client/main.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html index 9e2393399c..99c3dfb74c 100644 --- a/tools/static-assets/skel-vue/client/main.html +++ b/tools/static-assets/skel-vue/client/main.html @@ -1,16 +1,7 @@ ~name~ - - - - - -
diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js index 97d382a9bd..665c6aa1b1 100644 --- a/tools/static-assets/skel-vue/client/main.js +++ b/tools/static-assets/skel-vue/client/main.js @@ -1 +1,12 @@ -// main entry point is in imports/ui/main.jsx +import Vue from 'vue' + +import '../imports/ui/plugins' + +import App from '../imports/ui/App.vue' + +Meteor.startup(() => { + new Vue({ + el: '#app', + ...App, + }) +}) diff --git a/tools/static-assets/skel-vue-2/imports/api/collections/Links.js b/tools/static-assets/skel-vue/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/collections/Links.js rename to tools/static-assets/skel-vue/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/api/fixtures.js b/tools/static-assets/skel-vue/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/fixtures.js rename to tools/static-assets/skel-vue/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js deleted file mode 100644 index 4e98fcca62..0000000000 --- a/tools/static-assets/skel-vue/imports/api/links.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Meteor } from 'meteor/meteor' -import { Mongo } from 'meteor/mongo' - -export const LinksCollection = new Mongo.Collection('links') - -if (Meteor.isServer) { - Meteor.publish('links', function () { - return LinksCollection.find({}) - }) -} diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/index.js b/tools/static-assets/skel-vue/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/index.js rename to tools/static-assets/skel-vue/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/index.js b/tools/static-assets/skel-vue/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/index.js rename to tools/static-assets/skel-vue/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/links.js b/tools/static-assets/skel-vue/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/links.js rename to tools/static-assets/skel-vue/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue deleted file mode 100644 index d1ba384f1b..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/About.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue index 7a775391cb..e126098ccb 100644 --- a/tools/static-assets/skel-vue/imports/ui/App.vue +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -1,10 +1,26 @@ - - + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue deleted file mode 100644 index 5b1997efec..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue deleted file mode 100644 index ebe691f4d2..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Hello.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue deleted file mode 100644 index 0473845661..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Home.vue +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue deleted file mode 100644 index 5a17339c53..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Info.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue b/tools/static-assets/skel-vue/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js deleted file mode 100644 index e3500841ea..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/main.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Meteor } from 'meteor/meteor' -import { createApp } from 'vue' -import { VueMeteor } from 'vue-meteor-tracker' - -import App from './App.vue' -import { router } from './router' - -Meteor.startup(() => { - const app = createApp(App) - app.use(router) - app.use(VueMeteor) - app.mount('#app') -}) diff --git a/tools/static-assets/skel-vue-2/imports/ui/plugins.js b/tools/static-assets/skel-vue/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/plugins.js rename to tools/static-assets/skel-vue/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js deleted file mode 100644 index 7768ef4894..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/router.js +++ /dev/null @@ -1,18 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import Home from './Home.vue' - -export const router = createRouter({ - history: createWebHistory(), - routes: [ - { - path: '/', - name: 'home', - component: Home, - }, - { - path: '/about', - name: 'about', - component: () => import('./About.vue'), - }, - ], -}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index f8dc1cace8..e8cfe3ee72 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -3,7 +3,6 @@ "private": true, "scripts": { "start": "meteor run", - "build": "meteor build ../output/vue --directory", "test": "meteor test --once --driver-package meteortesting:mocha", "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", "visualize": "meteor --production --extra-packages bundle-visualizer" @@ -11,9 +10,8 @@ "dependencies": { "@babel/runtime": "^7.17.9", "meteor-node-stubs": "^1.2.1", - "vue": "^3.2.45", - "vue-meteor-tracker": "^3.0.0-beta.7", - "vue-router": "^4.1.6" + "vue": "^2.6.14", + "vue-meteor-tracker": "^2.0.0-beta.5" }, "meteor": { "mainModule": { @@ -21,13 +19,5 @@ "server": "server/main.js" }, "testModule": "tests/main.js" - }, - "devDependencies": { - "@types/meteor": "^2.8.1", - "@vitejs/plugin-vue": "^3.2.0", - "autoprefixer": "^10.4.13", - "postcss": "^8.4.19", - "tailwindcss": "^3.2.4", - "vite": "^3.2.3" } } diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js deleted file mode 100644 index 33ad091d26..0000000000 --- a/tools/static-assets/skel-vue/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js index 44f7bc045b..42950618b6 100644 --- a/tools/static-assets/skel-vue/server/main.js +++ b/tools/static-assets/skel-vue/server/main.js @@ -1,31 +1,3 @@ -import { Meteor } from 'meteor/meteor' -import { LinksCollection } from '/imports/api/links' - -async function insertLink({ title, url }) { - await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) -} - -Meteor.startup(async () => { - // If the Links collection is empty, add some data. - if ((await LinksCollection.find().countAsync()) === 0) { - await insertLink({ - title: 'Do the Tutorial', - url: 'https://www.solidjs.com/tutorial/introduction_basics', - }) - - await insertLink({ - title: 'Follow the Guide', - url: 'https://guide.meteor.com', - }) - - await insertLink({ - title: 'Read the Docs', - url: 'https://docs.meteor.com', - }) - - await insertLink({ - title: 'Discussions', - url: 'https://forums.meteor.com', - }) - } -}) +import '../imports/api/fixtures' +import '../imports/api/methods' +import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js deleted file mode 100644 index 72c950fc84..0000000000 --- a/tools/static-assets/skel-vue/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], - theme: { - extend: {}, - }, - plugins: [], -} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js index 086819d896..6d2a32e09d 100644 --- a/tools/static-assets/skel-vue/tests/main.js +++ b/tools/static-assets/skel-vue/tests/main.js @@ -1,20 +1,20 @@ -import assert from 'assert' +import assert from "assert"; -describe('vue-skeleton', function () { - it('package.json has correct name', async function () { - const { name } = await import('../package.json') - assert.strictEqual(name, 'vue-skeleton') - }) +describe("skel", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "skel"); + }); if (Meteor.isClient) { - it('client is not server', function () { - assert.strictEqual(Meteor.isServer, false) - }) + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); } if (Meteor.isServer) { - it('server is not client', function () { - assert.strictEqual(Meteor.isClient, false) - }) + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); } -}) +}); diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js deleted file mode 100644 index d3aeaa9aba..0000000000 --- a/tools/static-assets/skel-vue/vite.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -export default defineConfig({ - plugins: [vue()], - meteor: { - clientEntry: 'imports/ui/main.js', - }, - optimizeDeps: { - exclude: ['vue-meteor-tracker'], - }, -}) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 88e1ef394b..234b36f9bc 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,7 +29,6 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**", - "./static-assets/scaffolds*/**", + "./static-assets/skel*/**" ] } From f60bfc7f75a24263539ef67fe856afab6eaf983e Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 10:17:42 -0400 Subject: [PATCH 229/293] Revert "Revert "Merge pull request #12273 from meteor/release-2.9"" This reverts commit 5d19fec09b195d3c3bfea8559ed039c10d253de7. --- .circleci/config.yml | 64 +- .travis.yml | 14 +- docs/history.md | 119 +- docs/source/api/email.md | 22 + docs/source/commandline.md | 393 +- guide/_config.yml | 3 +- guide/source/2.9-migration.md | 102 + meteor | 2 +- .../eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 +- npm-packages/meteor-babel/options.js | 18 +- npm-packages/meteor-babel/package-lock.json | 3880 ++++++++++++++++- npm-packages/meteor-babel/package.json | 6 +- npm-packages/meteor-babel/runtime.js | 24 +- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- packages/accounts-base/accounts_client.js | 5 + .../accounts-base/accounts_client_tests.js | 48 +- packages/accounts-base/accounts_common.js | 59 +- packages/accounts-base/accounts_server.js | 101 +- packages/accounts-base/accounts_tests.js | 56 + packages/accounts-base/package.js | 6 +- packages/accounts-oauth/oauth_common.js | 55 + packages/accounts-oauth/oauth_server.js | 43 + packages/accounts-oauth/package.js | 7 +- packages/accounts-password/package.js | 2 +- packages/accounts-password/password_client.js | 2 - packages/accounts-password/password_server.js | 113 +- packages/accounts-password/password_tests.js | 4 +- .../.npm/package/npm-shrinkwrap.json | 746 ++-- packages/babel-compiler/package.js | 4 +- packages/ecmascript/package.js | 2 +- packages/email/email.js | 135 +- packages/email/email_test_helpers.js | 21 + packages/email/email_tests.js | 582 ++- packages/email/email_tests_data.js | 254 ++ packages/email/package.js | 2 +- packages/facebook-oauth/facebook_server.js | 137 +- packages/facebook-oauth/package.js | 3 +- packages/github-oauth/github_server.js | 29 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/google_server.js | 163 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/meetup_server.js | 83 +- packages/meetup-oauth/package.js | 3 +- .../meteor_developer_server.js | 126 +- packages/meteor-developer-oauth/package.js | 3 +- packages/meteor-tool/package.js | 2 +- packages/meteor/asl-helpers.js | 22 + packages/meteor/helpers.js | 34 +- packages/meteor/meteor.d.ts | 18 +- packages/meteor/package.js | 5 +- packages/minifier-css/minifier-async-tests.js | 51 + packages/minifier-css/minifier.js | 32 +- packages/minifier-css/package.js | 3 +- packages/minimongo/cursor.js | 6 +- packages/minimongo/local_collection.js | 8 + packages/minimongo/package.js | 2 +- packages/mongo/collection.js | 27 + packages/mongo/collection_async_tests.js | 11 + packages/mongo/mongo_driver.js | 12 + packages/mongo/oplog_v2_converter.js | 6 +- packages/mongo/oplog_v2_converter_tests.js | 65 + packages/mongo/package.js | 2 +- packages/mongo/remote_collection_driver.js | 21 +- .../.npm/package/npm-shrinkwrap.json | 374 +- packages/npm-mongo/package.js | 4 +- packages/oauth/oauth_server.js | 32 +- packages/oauth/package.js | 3 +- packages/oauth1/oauth1_binding.js | 92 +- packages/oauth1/oauth1_server.js | 10 +- packages/oauth1/oauth1_tests.js | 22 +- packages/oauth1/package.js | 7 +- packages/oauth2/oauth2_server.js | 4 +- packages/oauth2/oauth2_tests.js | 16 +- packages/oauth2/package.js | 2 +- .../package-version-parser-tests.js | 4 +- packages/package-version-parser/package.js | 5 +- packages/promise/package.js | 2 +- packages/promise/server.js | 14 +- packages/standard-minifier-css/package.js | 2 +- .../plugin/minify-css.js | 2 +- packages/test-helpers/async_multi.js | 30 +- packages/test-helpers/package.js | 5 +- packages/test-in-browser/driver.js | 4 +- packages/test-in-browser/package.js | 2 +- packages/test-in-console/puppeteerRunner.js | 32 +- packages/tinytest/package.js | 2 +- packages/tinytest/tinytest.js | 153 +- packages/tinytest/tinytest_server.js | 4 +- packages/twitter-oauth/package.js | 2 +- packages/twitter-oauth/twitter_server.js | 6 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 3 +- packages/weibo-oauth/weibo_server.js | 82 +- .../admin/meteor-release-experimental.json | 2 +- scripts/admin/meteor-release-official.json | 2 +- scripts/dev-bundle-tool-package.js | 2 +- tools/cli/commands-packages.js | 2 +- tools/cli/commands.js | 328 +- tools/cli/help.txt | 34 +- tools/console/console.js | 15 + tools/packaging/package-client.js | 1 - tools/static-assets/README.md | 8 + .../static-assets/scaffolds-js/collection.js | 3 + tools/static-assets/scaffolds-js/index.js | 3 + tools/static-assets/scaffolds-js/methods.js | 29 + .../scaffolds-js/publications.js | 6 + .../static-assets/scaffolds-ts/collection.ts | 9 + tools/static-assets/scaffolds-ts/index.ts | 3 + tools/static-assets/scaffolds-ts/methods.ts | 30 + .../scaffolds-ts/publications.ts | 6 + .../skel-apollo/.meteor/packages | 2 +- .../static-assets/skel-bare/.meteor/packages | 2 +- .../static-assets/skel-blaze/.meteor/packages | 3 +- .../skel-chakra-ui/.meteor/packages | 3 +- .../static-assets/skel-full/.meteor/packages | 1 + .../skel-minimal/.meteor/packages | 1 + .../static-assets/skel-react/.meteor/packages | 3 +- .../static-assets/skel-solid/.meteor/packages | 3 +- .../skel-svelte/.meteor/packages | 3 +- .../skel-tailwind/.meteor/packages | 3 +- .../skel-typescript/.meteor/packages | 3 +- .../skel-typescript/package.json | 2 +- tools/static-assets/skel-vue-2/.gitignore | 1 + .../skel-vue-2/.meteor/.gitignore | 1 + .../static-assets/skel-vue-2/.meteor/packages | 24 + .../skel-vue-2/.meteor/platforms | 2 + .../static-assets/skel-vue-2/client/main.html | 7 + tools/static-assets/skel-vue-2/client/main.js | 12 + .../imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../imports/api/fixtures.js | 0 .../imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../imports/api/methods/index.js | 0 .../imports/api/publications/index.js | 0 .../imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 .../skel-vue-2/imports/ui/App.vue | 26 + .../imports/ui/components/Hello.vue | 0 .../imports/ui/components/Info.vue | 0 .../imports/ui/plugins.js | 0 tools/static-assets/skel-vue-2/package.json | 23 + tools/static-assets/skel-vue-2/server/main.js | 3 + tools/static-assets/skel-vue-2/tests/main.js | 20 + .../skel-vue/.meteor/.finished-upgraders | 19 + tools/static-assets/skel-vue/.meteor/.id | 7 + tools/static-assets/skel-vue/.meteor/packages | 29 +- tools/static-assets/skel-vue/.meteor/release | 1 + tools/static-assets/skel-vue/.meteor/versions | 71 + tools/static-assets/skel-vue/README.md | 19 + tools/static-assets/skel-vue/client/main.css | 3 + tools/static-assets/skel-vue/client/main.html | 9 + tools/static-assets/skel-vue/client/main.js | 13 +- .../skel-vue/imports/api/links.js | 10 + .../skel-vue/imports/ui/About.vue | 5 + .../static-assets/skel-vue/imports/ui/App.vue | 32 +- .../skel-vue/imports/ui/AppMenu.vue | 6 + .../skel-vue/imports/ui/Hello.vue | 16 + .../skel-vue/imports/ui/Home.vue | 10 + .../skel-vue/imports/ui/Info.vue | 16 + .../static-assets/skel-vue/imports/ui/main.js | 13 + .../skel-vue/imports/ui/router.js | 18 + tools/static-assets/skel-vue/package.json | 14 +- .../static-assets/skel-vue/postcss.config.js | 6 + tools/static-assets/skel-vue/server/main.js | 34 +- .../static-assets/skel-vue/tailwind.config.js | 8 + tools/static-assets/skel-vue/tests/main.js | 26 +- tools/static-assets/skel-vue/vite.config.js | 12 + tools/tsconfig.json | 3 +- 171 files changed, 7985 insertions(+), 1750 deletions(-) create mode 100644 guide/source/2.9-migration.md create mode 100644 packages/email/email_test_helpers.js create mode 100644 packages/email/email_tests_data.js create mode 100644 packages/meteor/asl-helpers.js create mode 100644 packages/minifier-css/minifier-async-tests.js create mode 100644 tools/static-assets/scaffolds-js/collection.js create mode 100644 tools/static-assets/scaffolds-js/index.js create mode 100644 tools/static-assets/scaffolds-js/methods.js create mode 100644 tools/static-assets/scaffolds-js/publications.js create mode 100644 tools/static-assets/scaffolds-ts/collection.ts create mode 100644 tools/static-assets/scaffolds-ts/index.ts create mode 100644 tools/static-assets/scaffolds-ts/methods.ts create mode 100644 tools/static-assets/scaffolds-ts/publications.ts create mode 100644 tools/static-assets/skel-vue-2/.gitignore create mode 100644 tools/static-assets/skel-vue-2/.meteor/.gitignore create mode 100644 tools/static-assets/skel-vue-2/.meteor/packages create mode 100644 tools/static-assets/skel-vue-2/.meteor/platforms create mode 100644 tools/static-assets/skel-vue-2/client/main.html create mode 100644 tools/static-assets/skel-vue-2/client/main.js rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/fixtures.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.tests.js (100%) create mode 100644 tools/static-assets/skel-vue-2/imports/ui/App.vue rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Info.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js (100%) create mode 100644 tools/static-assets/skel-vue-2/package.json create mode 100644 tools/static-assets/skel-vue-2/server/main.js create mode 100644 tools/static-assets/skel-vue-2/tests/main.js create mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders create mode 100644 tools/static-assets/skel-vue/.meteor/.id create mode 100644 tools/static-assets/skel-vue/.meteor/release create mode 100644 tools/static-assets/skel-vue/.meteor/versions create mode 100644 tools/static-assets/skel-vue/README.md create mode 100644 tools/static-assets/skel-vue/client/main.css create mode 100644 tools/static-assets/skel-vue/imports/api/links.js create mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/main.js create mode 100644 tools/static-assets/skel-vue/imports/ui/router.js create mode 100644 tools/static-assets/skel-vue/postcss.config.js create mode 100644 tools/static-assets/skel-vue/tailwind.config.js create mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index e8e1b5e52f..8dfa556f94 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2 +version: 2.1 # A reusable "run" snippet which is ran before each test to setup the # environment for user-limits, core-dumps, etc. @@ -96,6 +96,30 @@ build_machine_environment: &build_machine_environment NUM_GROUPS: 12 RUNNING_AVG_LENGTH: 6 +can_disable_fibers: &can_disable_fibers + parameters: + fibers: + type: boolean + default: true + +set_fibers_env: &set_fibers_env + name: "Disable Fibers" + command: | + if [ "<< parameters.fibers >>" == "false" ]; then + echo "Disabling Fibers" + echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV" + source "$BASH_ENV" + fi + + +# Run tests with Fibers and then without. +matrix_for_fibers: &matrix_for_fibers + matrix: + parameters: + # If we want to run with Fibers and without, just append false here. + fibers: [true] + + jobs: Get Ready: <<: *build_machine_environment @@ -167,6 +191,7 @@ jobs: path: /tmp/memuse.txt Isolated Tests: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -175,6 +200,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -209,6 +235,7 @@ jobs: path: /tmp/memuse.txt Test Group 0: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -217,6 +244,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -249,6 +277,7 @@ jobs: path: /tmp/memuse.txt Test Group 1: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -257,6 +286,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -289,6 +319,7 @@ jobs: path: /tmp/memuse.txt Test Group 2: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -297,6 +328,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -329,6 +361,7 @@ jobs: path: /tmp/memuse.txt Test Group 3: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -337,6 +370,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -369,6 +403,7 @@ jobs: path: /tmp/memuse.txt Test Group 4: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -377,6 +412,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -409,6 +445,7 @@ jobs: path: /tmp/memuse.txt Test Group 5: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -417,6 +454,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -449,6 +487,7 @@ jobs: path: /tmp/memuse.txt Test Group 6: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -457,6 +496,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -489,6 +529,7 @@ jobs: path: /tmp/memuse.txt Test Group 7: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -497,6 +538,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -529,6 +571,7 @@ jobs: path: /tmp/memuse.txt Test Group 8: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -537,6 +580,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -569,6 +613,7 @@ jobs: path: /tmp/memuse.txt Test Group 9: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -577,6 +622,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -609,6 +655,7 @@ jobs: path: /tmp/memuse.txt Test Group 10: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -617,6 +664,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -727,6 +775,7 @@ jobs: npm test Clean Up: + <<: *can_disable_fibers <<: *build_machine_environment steps: - attach_workspace: @@ -809,45 +858,58 @@ workflows: - Docs - Get Ready - Isolated Tests: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 0: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 1: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 2: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 3: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 4: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 5: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 6: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 7: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 8: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 9: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 10: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 11: requires: - Get Ready - Clean Up: + <<: *matrix_for_fibers requires: - Isolated Tests - Test Group 0 diff --git a/.travis.yml b/.travis.yml index 2d4a4a74d6..35e4e9f859 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,13 +8,17 @@ cache: - ".meteor" - ".babel-cache" script: - - export phantom=false - # to skip Downloading Chromium on every run - # https://github.com/dfernandez79/puppeteer/blob/main/README.md#q-chromium-gets-downloaded-on-every-npm-ci-run-how-can-i-cache-the-download - - export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - travis_retry ./packages/test-in-console/run.sh env: - - CXX=g++-4.8 + global: + - CXX=g++-4.8 + - phantom=false + - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium + jobs: + # We don't want to run the tests without fibers anymore. + # - DISABLE_FIBERS=1 + # Use a different flag, since node would use false as a string. + - FIBERS_ENABLED=1 addons: apt: sources: diff --git a/docs/history.md b/docs/history.md index d8e5806060..346edbfca1 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,104 @@ +## 2.9, 2022-XX-XX + +### Highlights +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) +* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) +* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) +* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) +* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) +* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) +* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) +* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) +* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) +* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) +* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) + + +#### Breaking Changes + +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + + +#### Migration Steps + +#### Meteor Version Release + +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `accounts-base@2.2.6` + - Moved some functions to accounts-oauth. +* `accounts-oauth@1.4.2` + - Received functions from accounts-base. +* `accounts-password@2.3.2` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` +* `babel-compiler@7.10.1` + - Updated babel to 7.17.1. +* `email@2.2.3` + - Create Email.sendAsync method without using Fibers. +* `facebook-oauth@1.11.2` + - Updated facebook-oauth to use async functions. +* `github-oauth@1.4.1` + - Updated github-oauth to use async functions. +* `google-oauth@1.4.3` + - Updated google-oauth to use async functions. +* `meetup-oauth@1.1.2` + - Updated meetup-oauth to use async functions. +* `meteor-developer-oauth@1.3.2` + - Updated meteor-developer-oauth to use async functions. +* `meteor@1.10.3` + - Added Async Local Storage helpers. +* `minifier-css@1.6.2` + - Asyncfied `minifyCss` function. +* `minimongo@1.9.1` + - Implemented Fibers-less MongoDB count methods. +* `mongo@1.16.2` + - Implemented Fibers-less MongoDB count methods. +* `npm-mongo@4.12.1` + - Updated npm-mongo to 4.12. +* `oauth@2.1.3` + - Asyncfied methods. +* `oauth1@1.5.1` + - Asyncfied methods. +* `oauth2@1.3.2` + - Asyncfied methods. +* `package-version-parser@3.2.1` + - Removed underscore. +* `promise@0.12.2` + - Added DISABLE_FIBERS flag. +* `standard-minifier-css@1.8.3` + - Asyncfied minify method. +* `test-helpers@1.3.1` + - added runAndThrowIfNeeded function. +* `test-in-browser@1.3.2` + - Adjusted e[type] to e.type +* `tinytest@1.2.2` + - TinyTest package without Future +* `twitter-oauth@1.3.2` + - Asyncfied methods. +* `typescript@4.6.4` + - updated typescript to 4.6.4. +* `weibo-oauth@1.3.2` + - Asyncfied methods. + +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@edimarlnx](https://github.com/edimarlnx) +- [@matheusccastroo](https://github.com/matheusccastroo) +- [@Grubba27](https://github.com/Grubba27) +- [@StorytellerCZ](https://github.com/StorytellerCZ) +- [@radekmie](https://github.com/radekmie) +- [@piotrpospiech](https://github.com/piotrpospiech) +- [@harryadel](https://github.com/harryadel) + +For making this great framework even better! + + ## v2.8.2, 2022-11-29 #### Highlights @@ -15,9 +116,6 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) @@ -26,6 +124,7 @@ N/A For making this great framework even better! + ## 2.8.1, 2022-11-14 #### Highlights @@ -132,7 +231,7 @@ _In case you want types in your app using the core packages types/zodern:types ( * `test-in-browser@1.3.1` - removed underscore. * `tracker@1.2.1` - - added types for package. +- added types for package. * `twitter-oauth@1.3.1` - removed underscore. * `underscore@1.0.11` @@ -141,7 +240,6 @@ _In case you want types in your app using the core packages types/zodern:types ( - added types for package. * `webapp-hashing@1.1.1` - added types for package. - ## v2.8, 2022-10-19 #### Highlights @@ -184,7 +282,16 @@ Read our [Migration Guide](https://guide.meteor.com/2.8-migration.html) for this - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). - +* `@meteorjs/babel@7.17.0` + - Upgrade TypeScript to `4.6.4` +* `babel-compiler@7.10.0` + - Upgrade TypeScript to `4.6.4` +* `ecmascript@0.16.3` + - Upgrade TypeScript to `4.6.4` +* `typescript@4.6.4` + - Upgrade TypeScript to `4.6.4` +* `eslint-plugin-meteor@7.4.0` + - Upgrade TypeScript to `4.6.4` #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 77ea6edf24..95ef8d6578 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -82,6 +82,28 @@ Meteor.call( 'This is a test of Email.send.' ); ``` +{% apibox "Email.sendAsync" %} + +`sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. +If you defined `Email.customTransport`, the `callAsync` method returns the return value from the `customTransport` method or a Promise, if this method is async. + +```js +// Server: Define a method that the client can call. +Meteor.methods({ + sendEmail(to, from, subject, text) { + // Make sure that all arguments are strings. + check([to, from, subject, text], [String]); + + // Let other method calls from the same client start running, without + // waiting for the email sending to complete. + this.unblock(); + + return Email.sendAsync({ to, from, subject, text }).catch(err => { + // + }); + } +}); +``` {% apibox "Email.hookSend" %} diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..ebb9381d3a 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,7 +129,19 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) +Create a basic [Vue 3](https://vuejs.org/) app. + +`--react` + +Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) +for more information. This is the default. + +`--angular` +for more information. + +`--vue-2` + +Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) for more information. `--svelte` @@ -146,43 +158,350 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [solid](https://www.solidjs.com/) app. +Create a basic [Solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | +| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | +| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | +| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | +| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | +| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | +| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | +| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | +| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | +| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | +| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | +| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | +| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | +| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | +| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | +| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | +| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | + +

meteor generate

+ +``meteor generate`` is a command for generating scaffolds for your current project. When ran without arguments, it will ask +you what is the name of the model you want to generate, if you do want methods for your api and publications. It can be +used as a command line only operation as well. + +running +```bash +meteor generate customer + +``` + +It will generate the following code in ``/imports/api`` +![Screenshot 2022-11-09 at 11 28 29](https://user-images.githubusercontent.com/70247653/200856551-71c100f5-8714-4b34-9678-4f08780dcc8b.png) + +That will have the following code: + + +

collection.js

+ +```js + + import { Mongo } from 'meteor/mongo'; + +export const CustomerCollection = new Mongo.Collection('customer'); + +``` + + + +

methods.js

+ +```js +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import { CustomerCollection } from './collection'; + +export async function create(data) { + return CustomerCollection.insertAsync({ ...data }); +} + +export async function update(_id, data) { + check(_id, String); + return CustomerCollection.updateAsync(_id, { ...data }); +} + +export async function remove(_id) { + check(_id, String); + return CustomerCollection.removeAsync(_id); +} + +export async function findById(_id) { + check(_id, String); + return CustomerCollection.findOneAsync(_id); +} + +Meteor.methods({ + 'Customer.create': create, + 'Customer.update': update, + 'Customer.remove': remove, + 'Customer.find': findById +}); + +``` + + + +

publication.js

+ +```js + +import { Meteor } from 'meteor/meteor'; +import { CustomerCollection } from './collection'; + +Meteor.publish('allCustomers', function publishCustomers() { + return CustomerCollection.find({}); +}); + + +``` + + + + +

index.js

+ +```js + +export * from './collection'; +export * from './methods'; +export * from './publications'; + +``` + +Also, there is the same version of these methods using TypeScript, that will be shown bellow. + +

path option

+ +If you want to create in another path, you can use the ``--path`` option in order to select where to place this boilerplate. +It will generate the model in that path. Note that is used TypeScript in this example. + +```bash + +meteor generate another-customer --path=server/admin + +``` + +It will generate in ``server/admin`` the another-client code: + +![Screenshot 2022-11-09 at 11 32 39](https://user-images.githubusercontent.com/70247653/200857560-a4874e4c-1078-4b7a-9381-4c6590d2f63b.png) + + +

collection.ts

+ +```typescript + +import { Mongo } from 'meteor/mongo'; + +export type AnotherCustomer = { + _id?: string; + name: string; + createdAt: Date; +} + +export const AnotherCustomerCollection = new Mongo.Collection('another-customer'); + +``` + +

methods.ts

+ +```typescript + +import { Meteor } from 'meteor/meteor'; +import { Mongo } from 'meteor/mongo'; +import { check } from 'meteor/check'; +import { AnotherCustomer, AnotherCustomerCollection } from './collection'; + +export async function create(data: AnotherCustomer) { + return AnotherCustomerCollection.insertAsync({ ...data }); +} + +export async function update(_id: string, data: Mongo.Modifier) { + check(_id, String); + return AnotherCustomerCollection.updateAsync(_id, { ...data }); +} + +export async function remove(_id: string) { + check(_id, String); + return AnotherCustomerCollection.removeAsync(_id); +} + +export async function findById(_id: string) { + check(_id, String); + return AnotherCustomerCollection.findOneAsync(_id); +} + +Meteor.methods({ + 'AnotherCustomer.create': create, + 'AnotherCustomer.update': update, + 'AnotherCustomer.remove': remove, + 'AnotherCustomer.find': findById +}); + + +``` + + + +

publications.ts

+ +```typescript + +import { Meteor } from 'meteor/meteor'; +import { AnotherCustomerCollection } from './collection'; + +Meteor.publish('allAnotherCustomers', function publishAnotherCustomers() { + return AnotherCustomerCollection.find({}); +}); + +``` + + + +

index.ts

+ +```typescript + +export * from './collection'; +export * from './methods'; +export * from './publications'; + +``` + + + +--- + + +

Using the Wizard

+ + +If you run the following command: + +```bash +meteor generate +``` + +It will prompt the following questions. + +![Screenshot 2022-11-09 at 11 38 29](https://user-images.githubusercontent.com/70247653/200859087-a2ef63b6-7ac1-492b-8918-0630cbd30686.png) + + + + +--- + +

Using your own template

+ +`--templatePath` + +```bash +meteor generate feed --templatePath=/scaffolds-ts +``` +![Screenshot 2022-11-09 at 11 42 47](https://user-images.githubusercontent.com/70247653/200860178-2341befe-bcfd-422f-a4bd-7c9918abfd97.png) + +> Note that this is not a CLI framework inside meteor but just giving some solutions for really common problems out of the box. +> Check out Yargs, Inquirer or Commander for more information about CLI frameworks. + + +You can use your own templates for scaffolding your specific workloads. To do that, you should pass in a template directory URL so that it can copy it with its changes. + +

How to rename things?

+ +Out of the box is provided a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` + +these replacements come from this function: + +_Note that scaffoldName is the name that you have passed as argument_ + +```js +const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + } +``` + +

How to bring your own templates?

+ +`--replaceFn` + +There is an option called ``--replaceFn`` that when you pass in given a .js file with two functions it will override all templating that we have defaulted to use your given function. +_example of a replacer file_ +```js +export function transformFilename(scaffoldName, filename) { + console.log(scaffoldName, filename); + return filename +} + +export function transformContents(scaffoldName, contents, fileName) { + console.log(fileName, contents); + return contents +} + +``` +If you run your command like this: + +```bash + meteor generate feed --replaceFn=/fn/replace.js +``` +It will generate files full of ``$$PascalCase$$``using the meteor provided templates. + +A better example of this feature would be the following js file: +```js +const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); +} +const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); +} + +const transformName = (scaffoldName, str) => { + return str.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + +} + +export function transformFilename(scaffoldName, filename) { + return transformName(scaffoldName, filename); +} + +export function transformContents(scaffoldName, contents, fileName) { + return transformName(scaffoldName, contents); +} +``` + + +

meteor login / logout

@@ -604,8 +923,8 @@ The `meteor node` command calls the [`node`](https://nodejs.org) version bundled with Meteor itself. > This is not to be confused with [`meteor shell`](#meteorshell), which provides -an almost identical experience but also gives you access to the "server" context -of a Meteor application. Typically, `meteor shell` will be preferred. +> an almost identical experience but also gives you access to the "server" context +> of a Meteor application. Typically, `meteor shell` will be preferred. Additional parameters can be passed in the same way as the `node` command, and the [Node.js documentation](https://nodejs.org/dist/latest-v4.x/docs/api/cli.html) diff --git a/guide/_config.yml b/guide/_config.yml index 7a99eb70f2..a28b565f8f 100644 --- a/guide/_config.yml +++ b/guide/_config.yml @@ -5,6 +5,7 @@ edit_branch: 'devel' edit_path: 'guide' content_root: 'content' versions: + - '2.9' - '2.8' - '2.7' - '2.6' @@ -37,7 +38,7 @@ sidebar_categories: - index - code-style - structure - - 2.8-migration + - 2.9-migration Data: - collections - data-loading diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md new file mode 100644 index 0000000000..6da327420a --- /dev/null +++ b/guide/source/2.9-migration.md @@ -0,0 +1,102 @@ +--- +title: Migrating to Meteor 2.9 +description: How to migrate your application to Meteor 2.9. +--- + +Meteor `2.9` introduces some changes in the `accounts` packages, the new method `Email.sendAsync`, the new method `Meteor.userAsync`, and more. For a complete breakdown of the changes, please refer to the [changelog](http://docs.meteor.com/changelog.html). + + +

Why is this new API important?

+ +You may know that on Meteor we use a package called [Fibers](https://github.com/laverdet/node-fibers). This package is what makes it possible to call an async function inside Meteor in a sync way (without having to wait for the promise to resolve). + +But starting from Node 16, Fibers will stop working, so Meteor needs to move away from Fibers, otherwise, we'll be stuck on Node 14. + +If you want to know more about the plan, you can check this [discussion](https://github.com/meteor/meteor/discussions/11505). + +

Why doing this change now?

+ +This will be a considerable change for older Meteor applications, and some parts of the code of any Meteor app will have to be adjusted eventually. So it's important to start the migration process as soon as possible. + +The migration process started in version 2.8. We recommend you [check that out](2.8-migration.htm) first in case you skipped. + +

Can I update to this version without changing my app?

+ +Yes. You can update to this version without changing your app. + +

What's new?

+ +Let's start with the accounts and OAuth packages. Some methods had to be restructured to work without Fibers in the future. The current methods will continue working as of today, but if you use some of the methods we'll mention below in custom login packages, we recommend you adapt them. + +Internal methods that are now async: + +- **_attemptLogin** +- **_loginMethod** +- **_runLoginHandlers** +- **Accounts._checkPassword**: still works as always, but now has a new version called `Accounts._checkPasswordAsync`. + + +We also have changes to asynchronous context in the registry of handlers for OAuth services. + +Now, the OAuth.Register method accepts an async handler, and it is possible to use the await option internally, avoiding to use methods that run on Fibers, such as **HTTP** (deprecated Meteor package), `Meteor.wrapAsync` and `Promise.await`. + +Before the changes you would have something like: + +```js +OAuth.registerService('github', 2, null, (query) => { + const accessTokenCall = Meteor.wrapAsync(getAccessToken); + const accessToken = accessTokenCall(query); + const identityCall = Meteor.wrapAsync(getIdentity); +… +}); +``` + +Now you have: + +```js +OAuth.registerService('github', 2, null, async (query) => { + const accessToken = await getAccessToken(query); + const identity = await getIdentity(accessToken); + const emails = await getEmails(accessToken); +… +}); +``` + +

New async methods

+ +We now have async version of methods that you already use. They are: + +- [Email.sendAsync()](https://github.com/meteor/meteor/pull/12101/files#diff-b2453acdfd34fb563a1e258956d2733ab06a2aa77c87e402cfa53a86a48133a8R86-R107) +- [Meteor.userAsync()](https://github.com/meteor/meteor/pull/12274) +- [CssTools.minifyCssAsync()](https://github.com/meteor/meteor/pull/12105) + +

Accounts-base without service-configuration

+ +Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. + +

Migrating from a version older than 2.8?

+ +If you're migrating from a version of Meteor older than Meteor 2.8, there may be important considerations not listed in this guide. Please review the older migration guides for details: + +* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7) +* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6) +* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5) +* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4) +* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3) +* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2) +* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0) +* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12) +* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11) +* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2) +* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10) +* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3) +* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9) +* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3) +* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2) +* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8) +* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7) +* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6) +* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5) +* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4) +* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3) +* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2) diff --git a/meteor b/meteor index 0779da7ba2..e1379039a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.0 +BUNDLE_VERSION=14.21.1.2 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 6f01831721..7845d884a3 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.3.0", + "version": "7.4.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index ddab44b16d..de71198d42 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.0", + typescript: "4.6.4", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 21a9be7dde..dc215572b8 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,11 +80,7 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push( - [require("@babel/preset-react"), { - runtime: "automatic" - }] - ); + options.presets.push(require("@babel/preset-react")); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true @@ -189,11 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); + if (!process.env.DISABLE_FIBERS) { + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: false + }]); + } // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 7fec2af89a..17c5612fb7 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,8 +1,3875 @@ { "name": "@meteorjs/babel", - "version": "7.16.0-beta.1", - "lockfileVersion": 1, + "version": "7.17.2-beta.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@meteorjs/babel", + "version": "7.17.2-beta.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-react": "^7.16.7", + "@babel/runtime": "7.17.2", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "@meteorjs/reify": "0.23.0", + "babel-preset-meteor": "^7.10.0", + "babel-preset-minify": "^0.5.1", + "convert-source-map": "^1.6.0", + "lodash": "^4.17.21", + "meteor-babel-helpers": "0.0.3", + "typescript": "~4.6.4" + }, + "devDependencies": { + "@babel/plugin-proposal-decorators": "7.14.5", + "@babel/plugin-syntax-decorators": "7.14.5", + "d3": "4.13.0", + "fibers": "5.0.0", + "meteor-promise": "0.9.0", + "mocha": "6.2.3", + "promise": "8.1.0", + "source-map": "0.6.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", + "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", + "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/@babel/core/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", + "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@meteorjs/reify": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", + "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", + "dependencies": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "magic-string": "^0.25.3", + "periscopic": "^2.0.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@meteorjs/reify/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "node_modules/babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + }, + "node_modules/babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + }, + "node_modules/babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + }, + "node_modules/babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + }, + "node_modules/babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + }, + "node_modules/babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" + }, + "node_modules/babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-dead-code-elimination": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "node_modules/babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + }, + "node_modules/babel-plugin-minify-mangle-names": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", + "dependencies": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + }, + "node_modules/babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" + }, + "node_modules/babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + }, + "node_modules/babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + }, + "node_modules/babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + }, + "node_modules/babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + }, + "node_modules/babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "dependencies": { + "esutils": "^2.0.2" + } + }, + "node_modules/babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + }, + "node_modules/babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + }, + "node_modules/babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + }, + "node_modules/babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + }, + "node_modules/babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + }, + "node_modules/babel-preset-meteor": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", + "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", + "dependencies": { + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13" + } + }, + "node_modules/babel-preset-minify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", + "dependencies": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001248", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", + "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/core-js-compat/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "dev": true, + "dependencies": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + } + }, + "node_modules/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "node_modules/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "node_modules/d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "node_modules/d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "node_modules/d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "node_modules/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "dev": true, + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "node_modules/d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", + "dev": true + }, + "node_modules/d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "node_modules/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "node_modules/d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "node_modules/d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "node_modules/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "node_modules/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "node_modules/d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "node_modules/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", + "dev": true + }, + "node_modules/d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "dev": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "node_modules/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "node_modules/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.793", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", + "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/meteor-babel-helpers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + }, + "node_modules/meteor-promise": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -1073,7 +4940,8 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "requires": {} }, "ansi-colors": { "version": "3.2.3", @@ -2722,9 +6590,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unbox-primitive": { "version": "1.0.1", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index c5c361f366..6733ac41b8 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -37,7 +37,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-react": "^7.16.7", - "@babel/runtime": "^7.17.2", + "@babel/runtime": "7.17.2", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0", @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.5.4" + "typescript": "~4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/npm-packages/meteor-babel/runtime.js b/npm-packages/meteor-babel/runtime.js index 43b5c85c85..c7fe580b3f 100644 --- a/npm-packages/meteor-babel/runtime.js +++ b/npm-packages/meteor-babel/runtime.js @@ -11,19 +11,21 @@ Module.prototype.resolve = function (id) { require("@meteorjs/reify/lib/runtime").enable(Module.prototype); -require("meteor-promise").makeCompatible( - global.Promise = global.Promise || - require("promise/lib/es6-extensions"), - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + global.Promise = global.Promise || + require("promise/lib/es6-extensions"), + require("fibers") + ); // If Promise.asyncApply is defined, use it to wrap calls to // regeneratorRuntime.async so that the entire async function will run in // its own Fiber, not just the code that comes after the first await. -if (typeof Promise.asyncApply === "function") { - var regeneratorRuntime = require("@babel/runtime/regenerator"); - var realAsync = regeneratorRuntime.async; - regeneratorRuntime.async = function (innerFn) { - return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); - }; + if (typeof Promise.asyncApply === "function") { + var regeneratorRuntime = require("@babel/runtime/regenerator"); + var realAsync = regeneratorRuntime.async; + regeneratorRuntime.async = function (innerFn) { + return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); + }; + } } diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..fcae57bcec 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.9.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 8afbd9c39e..53d344ef33 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.2", + "version": "2.9.0", "description": "Install Meteor", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index cfded81faa..842e927ad9 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,6 +798,11 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); + // TODO: the code above needs to be changed to Meteor.userAsync() when we have + // a way to make it reactive using async. + // Template.registerHelper('currentUserAsync', + // async () => await Meteor.userAsync()); + /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 9ebb7d4b9f..880a71e4fe 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,6 +94,20 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.loggingIn() is false after login has completed', + (test, done) => { + logoutAndCreateUser(test, done, () => { + // Login then verify loggingIn is false after login has completed + Meteor.loginWithPassword(username, password, async () => { + test.isFalse(Meteor.loggingIn()); + test.isTrue(await Meteor.userAsync()); + removeTestUser(done); + }); + }); + } +); + Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -150,7 +164,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user obeys explicit and default field selectors', + 'accounts - Meteor.user() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -178,6 +192,38 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', + (test, done) => { + logoutAndCreateUser(test, done, () => { + Meteor.loginWithPassword(username, password, async () => { + // by default, all fields should be returned + let user; + user = await Meteor.userAsync(); + test.equal(user.profile[excludeField], excludeValue); + + // this time we want to exclude the default fields + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); + + user = await Meteor.userAsync(); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + + // this time we only want certain fields... + + user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); + Accounts._options = options; + removeTestUser(done); + }); + }); + } +); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..edca3cd31b 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,40 +79,6 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; - - // loginServiceConfiguration and ConfigError are maintained for backwards compatibility - Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - this.loginServiceConfiguration = ServiceConfiguration.configurations; - this.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - 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 configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - this._options[key] = settings[key]; - } - }); - } - }); } /** @@ -170,6 +136,18 @@ export class AccountsCommon { : null; } + /** + * @summary Get the current user record, or `null` if no user is logged in. + * @locus Anywhere + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ + async userAsync(options) { + const userId = this.userId(); + return userId + ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + : null; + } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -264,6 +242,7 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { 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}`); } }); @@ -418,6 +397,15 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); +/** + * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. + * @locus Anywhere but publish functions + * @importFromPackage meteor + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ +Meteor.userAsync = options => Accounts.userAsync(options); + // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires @@ -430,9 +418,6 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes -// how long we wait before logging out clients when Meteor.logoutOtherClients is -// called -export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index f677baa34c..2fd0a6d41b 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,4 +1,5 @@ import crypto from 'crypto'; +import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -434,7 +435,7 @@ export class AccountsServer extends AccountsCommon { // If the login is allowed and isn't aborted by a validate login hook // callback, log in the user. // - _attemptLogin( + async _attemptLogin( methodInvocation, methodName, methodArgs, @@ -494,18 +495,18 @@ export class AccountsServer extends AccountsCommon { // Ensure that thrown exceptions are caught and that login hook // callbacks are still called. // - _loginMethod( + async _loginMethod( methodInvocation, methodName, methodArgs, type, fn ) { - return this._attemptLogin( + return await this._attemptLogin( methodInvocation, methodName, methodArgs, - tryLoginMethod(type, fn) + await tryLoginMethod(type, fn) ); }; @@ -582,11 +583,10 @@ export class AccountsServer extends AccountsCommon { // Try all of the registered login handlers until one of them doesn't // return `undefined`, meaning it handled this call to `login`. Return // that return value. - _runLoginHandlers(methodInvocation, options) { + async _runLoginHandlers(methodInvocation, options) { for (let handler of this._loginHandlers) { - const result = tryLoginMethod( - handler.name, - () => handler.handler.call(methodInvocation, options) + const result = await tryLoginMethod(handler.name, async () => + await handler.handler.call(methodInvocation, options) ); if (result) { @@ -594,7 +594,10 @@ export class AccountsServer extends AccountsCommon { } if (result !== undefined) { - throw new Meteor.Error(400, "A login handler should return a result or undefined"); + throw new Meteor.Error( + 400, + 'A login handler should return a result or undefined' + ); } } @@ -639,14 +642,15 @@ export class AccountsServer extends AccountsCommon { // If successful, returns {token: reconnectToken, id: userId} // If unsuccessful (for example, if the user closed the oauth login popup), // throws an error describing the reason - methods.login = function (options) { + methods.login = async function (options) { // Login handlers should really also check whatever field they look at in // options, but we don't enforce it. check(options, Object); - const result = accounts._runLoginHandlers(this, options); + const result = await accounts._runLoginHandlers(this, options); + //console.log({result}); - return accounts._attemptLogin(this, "login", arguments, result); + return await accounts._attemptLogin(this, "login", arguments, result); }; methods.logout = function () { @@ -721,14 +725,19 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) - options.secret = OAuthEncryption.seal(options.secret); + if (Package["oauth-encryption"]) { + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) + options.secret = OAuthEncryption.seal(options.secret); + } - ServiceConfiguration.configurations.insert(options); + ServiceConfiguration.configurations.insert(options); + } }; accounts._server.methods(methods); @@ -753,8 +762,10 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + } }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1507,10 +1518,10 @@ const cloneAttemptWithConnection = (connection, attempt) => { return clonedAttempt; }; -const tryLoginMethod = (type, fn) => { +const tryLoginMethod = async (type, fn) => { let result; try { - result = fn(); + result = await fn(); } catch (e) { result = {error: e}; @@ -1679,17 +1690,7 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); -}; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; // OAuth service data is temporarily stored in the pending credentials // collection during the oauth authentication process. Sensitive data @@ -1701,44 +1702,12 @@ const usingOAuthEncryption = () => { const pinEncryptedFieldsToUser = (serviceData, userId) => { Object.keys(serviceData).forEach(key => { let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) + if (OAuthEncryption?.isSealed(value)) value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); serviceData[key] = value; }); }; - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); - // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index de870e0f81..797bd758f0 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,6 +604,62 @@ Tinytest.add( } ); + +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', + async test => { + const ignoreFieldName = "bigArray"; + const customField = "customField"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + + // stub Meteor.userId() so it works outside methods and returns the correct user: + const origAccountsUserId = Accounts.userId; + Accounts.userId = () => userId; + + Accounts._options = {}; + + // test the field is included by default + let user = await Meteor.userAsync(); + test.isNotUndefined(user[ignoreFieldName], 'included by default'); + + // test the field is excluded + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); + user = await Meteor.userAsync(); + test.isUndefined(user[ignoreFieldName], 'excluded'); + user = await Meteor.userAsync({}); + test.isUndefined(user[ignoreFieldName], 'excluded {}'); + + // test the field can still be retrieved if required + user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); + test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); + test.isUndefined(user.username, 'field can be retrieved username'); + + // test a combined negative field specifier + user = await Meteor.userAsync({ fields: { username: 0 } }); + test.isUndefined(user[ignoreFieldName], 'combined field selector'); + test.isUndefined(user.username, 'combined field selector username'); + + // test an explicit request for the full user object + user = await Meteor.userAsync({ fields: {} }); + test.isNotUndefined(user[ignoreFieldName], 'full selector'); + test.isNotUndefined(user.username, 'full selector username'); + + Accounts._options = {}; + + // Test that a custom field gets retrieved properly + Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); + user = await Meteor.userAsync(); + test.isNotUndefined(user[customField]); + test.isUndefined(user.username); + test.isUndefined(user[ignoreFieldName]); + + Accounts._options = options; + Accounts.userId = origAccountsUserId; + } +); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 90f03e6b50..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5', + version: '2.2.6', }); Package.onUse(api => { @@ -15,10 +15,6 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index e0e1a1ad48..bfb99b0a5d 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,3 +1,24 @@ +import { Meteor } from 'meteor/meteor'; + +// TODO get from account-base +// config option keys +const VALID_CONFIG_KEYS = [ + 'sendVerificationEmail', + 'forbidClientAccountCreation', + 'passwordEnrollTokenExpiration', + 'passwordEnrollTokenExpirationInDays', + 'restrictCreationByEmailDomain', + 'loginExpirationInDays', + 'loginExpiration', + 'passwordResetTokenExpirationInDays', + 'passwordResetTokenExpiration', + 'ambiguousErrorMessages', + 'bcryptRounds', + 'defaultFieldSelector', + 'loginTokenExpirationHours', + 'tokenSequenceLength', +]; + Accounts.oauth = {}; const services = {}; @@ -31,3 +52,37 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); + +// loginServiceConfiguration and ConfigError are maintained for backwards compatibility +Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; + Accounts.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + 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 configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + Accounts._options[key] = settings[key]; + } + }); + } +}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index c76b2e439b..f8d67eff25 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -55,3 +57,44 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); + +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption?.keyIsLoaded(); +}; + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f20513769d..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.1", + version: "1.4.2", }); Package.onUse(api => { @@ -9,6 +9,11 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); + + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + api.use('oauth'); api.addFiles('oauth_common.js'); diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c4f9cadbd3..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.1', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 5d1279782b..30d3b49450 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,12 +7,10 @@ const reportError = (error, callback) => { } }; - const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; - Accounts.callLoginMethod({ methodArguments: [ { diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index ea1236313c..c44be77f66 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,8 +1,5 @@ -import bcrypt from 'bcrypt' -import {Accounts} from "meteor/accounts-base"; - -const bcryptHash = Meteor.wrapAsync(bcrypt.hash); -const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); +import { hash as bcryptHash, compare as bcryptCompare } from 'bcrypt'; +import { Accounts } from "meteor/accounts-base"; // Utility for grabbing user const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); @@ -48,9 +45,9 @@ const getPasswordString = password => { // SHA256 before bcrypt) or an object with properties `digest` and // `algorithm` (in which case we bcrypt `password.digest`). // -const hashPassword = password => { +const hashPassword = async password => { password = getPasswordString(password); - return bcryptHash(password, Accounts._bcryptRounds()); + return await bcryptHash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -74,7 +71,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -Accounts._checkPassword = (user, password) => { +const checkPasswordAsync = async (user, password) => { const result = { userId: user._id }; @@ -83,15 +80,16 @@ Accounts._checkPassword = (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! bcryptCompare(formattedPassword, hash)) { + if (! await bcryptCompare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. - Meteor.defer(() => { + + Meteor.defer(async () => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - bcryptHash(formattedPassword, Accounts._bcryptRounds()) + await bcryptHash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -99,7 +97,13 @@ Accounts._checkPassword = (user, password) => { return result; }; -const checkPassword = Accounts._checkPassword; + +const checkPassword = (user, password) => { + return Promise.await(checkPasswordAsync(user, password)); +}; + +Accounts._checkPassword = checkPassword; +Accounts._checkPasswordAsync = checkPasswordAsync; /// /// LOGIN @@ -163,7 +167,7 @@ const passwordValidator = Match.OneOf( // // Note that neither password option is secure without SSL. // -Accounts.registerLoginHandler("password", options => { +Accounts.registerLoginHandler("password", async options => { if (!options.password) return undefined; // don't handle @@ -188,7 +192,7 @@ Accounts.registerLoginHandler("password", options => { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, options.password); + const result = await checkPasswordAsync(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -258,7 +262,7 @@ Accounts.setUsername = (userId, newUsername) => { // Let the user change their own password if they know the old // password. `oldPassword` and `newPassword` should be objects with keys // `digest` and `algorithm` (representing the SHA256 of the password). -Meteor.methods({changePassword: function (oldPassword, newPassword) { +Meteor.methods({changePassword: async function (oldPassword, newPassword) { check(oldPassword, passwordValidator); check(newPassword, passwordValidator); @@ -278,12 +282,12 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, oldPassword); + const result = await checkPasswordAsync(user, oldPassword); if (result.error) { throw result.error; } - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // It would be better if this removed ALL existing tokens and replaced // the token for the current connection with a new one, but that would @@ -316,10 +320,10 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { * @param {Object} options.logout Logout all current connections with this userId (default: true) * @importFromPackage accounts-base */ -Accounts.setPassword = (userId, newPlaintextPassword, options) => { - check(userId, String) - check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)) - check(options, Match.Maybe({ logout: Boolean })) +Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { + check(userId, String); + check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); + check(options, Match.Maybe({ logout: Boolean })); options = { logout: true , ...options }; const user = getUserById(userId, {fields: {_id: 1}}); @@ -331,7 +335,7 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { $unset: { 'services.password.reset': 1 }, - $set: {'services.password.bcrypt': hashPassword(newPlaintextPassword)} + $set: {'services.password.bcrypt': await hashPassword(newPlaintextPassword)} }; if (options.logout) { @@ -341,6 +345,19 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { Meteor.users.update({_id: user._id}, update); }; +/** + * @summary Forcibly change the password for a user. + * @locus Server + * @param {String} userId The id of the user to update. + * @param {String} newPassword A new password for the user. + * @param {Object} [options] + * @param {Object} options.logout Logout all current connections with this userId (default: true) + * @importFromPackage accounts-base + */ +Accounts.setPassword = (userId, newPlaintextPassword, options) => { + return Promise.await(Accounts.setPasswordAsync(userId, newPlaintextPassword, options)); +}; + /// /// RESETTING VIA EMAIL @@ -560,15 +577,15 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData, extraParams) => { // Take token from sendResetPasswordEmail or sendEnrollmentEmail, change // the users password, and log them in. -Meteor.methods({resetPassword: function (...args) { +Meteor.methods({resetPassword: async function (...args) { const token = args[0]; const newPassword = args[1]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "resetPassword", args, "password", - () => { + async () => { check(token, String); check(newPassword, passwordValidator); @@ -617,7 +634,7 @@ Meteor.methods({resetPassword: function (...args) { error: new Meteor.Error(403, "Token has invalid email address") }; - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be // logged in as. Make sure to avoid logging ourselves out if this @@ -712,9 +729,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData, extraParams) => // Take token from sendVerificationEmail, mark the email as verified, // and log them in. -Meteor.methods({verifyEmail: function (...args) { +Meteor.methods({verifyEmail: async function (...args) { const token = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "verifyEmail", args, @@ -888,7 +905,7 @@ Accounts.removeEmail = (userId, email) => { // does the actual user insertion. // // returns the user id -const createUser = options => { +const createUser = async options => { // Unknown keys allowed, because a onCreateUserHook can take arbitrary // options. check(options, Match.ObjectIncluding({ @@ -903,22 +920,22 @@ const createUser = options => { const user = {services: {}}; if (password) { - const hashed = hashPassword(password); + const hashed = await hashPassword(password); user.services.password = { bcrypt: hashed }; } - return Accounts._createUserCheckingDuplicates({ user, email, username, options }) + return Accounts._createUserCheckingDuplicates({ user, email, username, options }); }; // method for create user. Requests come from the client. -Meteor.methods({createUser: function (...args) { +Meteor.methods({createUser: async function (...args) { const options = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "createUser", args, "password", - () => { + async () => { // createUser() above does more checking. check(options, Object); if (Accounts._options.forbidClientAccountCreation) @@ -926,7 +943,7 @@ Meteor.methods({createUser: function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - const userId = Accounts.createUserVerifyingEmail(options); + const userId = await Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -948,10 +965,10 @@ Meteor.methods({createUser: function (...args) { * @param {Object} options.profile The user's profile, typically including the `name` field. * @importFromPackage accounts-base * */ -Accounts.createUserVerifyingEmail = (options) => { +Accounts.createUserVerifyingEmail = async (options) => { options = { ...options }; // Create user. result contains id and token. - const userId = createUser(options); + const userId = await createUser(options); // safety belt. createUser is supposed to throw on error. send 500 error // instead of sending a verification email with empty userid. if (! userId) @@ -976,14 +993,15 @@ Accounts.createUserVerifyingEmail = (options) => { // Unlike the client version, this does not log you in as this user // after creation. // -// returns userId or throws an error if it can't create +// returns Promise or throws an error if it can't create // // XXX add another argument ("server options") that gets sent to onCreateUser, // which is always empty when called from the createUser method? eg, "admin: // true", which we want to prevent the client from setting, but which a custom // method calling Accounts.createUser could set? // -Accounts.createUser = (options, callback) => { + +Accounts.createUserAsync = async (options, callback) => { options = { ...options }; // XXX allow an optional callback? @@ -994,6 +1012,23 @@ Accounts.createUser = (options, callback) => { return createUser(options); }; +// Create user directly on the server. +// +// Unlike the client version, this does not log you in as this user +// after creation. +// +// returns userId or throws an error if it can't create +// +// XXX add another argument ("server options") that gets sent to onCreateUser, +// which is always empty when called from the createUser method? eg, "admin: +// true", which we want to prevent the client from setting, but which a custom +// method calling Accounts.createUser could set? +// + +Accounts.createUser = (options, callback) => { + return Promise.await(Accounts.createUserAsync(options, callback)); +}; + /// /// PASSWORD-SPECIFIC INDEXES ON USERS /// diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 23e7e6ca8c..0266c977f2 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1747,7 +1747,7 @@ if (Meteor.isServer) (() => { Tinytest.addAsync( 'passwords - allow custom bcrypt rounds', - (test, done) => { + async (test, done) => { const getUserHashRounds = user => Number(user.services.password.bcrypt.substring(4, 6)); @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - Accounts._checkPassword(user1, password); + await Accounts._checkPasswordAsync(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4453e83e92..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,206 +2,213 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + } + } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -219,9 +226,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -249,139 +256,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" }, "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" }, "@babel/runtime": { "version": "7.17.2", @@ -389,39 +396,49 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.16.0-beta.1", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", - "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -436,9 +453,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "acorn": { "version": "6.4.2", @@ -463,38 +480,33 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -506,14 +518,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -523,17 +535,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -548,62 +560,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -613,12 +625,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" }, "babel-preset-meteor": { "version": "7.10.0", @@ -626,24 +638,19 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", + "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" }, "browserslist": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", - "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" + "version": "1.0.30001436", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", + "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" }, "chalk": { "version": "2.4.2", @@ -658,39 +665,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "escalade": { "version": "3.1.1", @@ -700,7 +695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "estree-walker": { "version": "2.0.2", @@ -722,11 +717,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -740,17 +730,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" }, "is-reference": { "version": "1.2.1", @@ -780,22 +765,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "ms": { "version": "2.1.2", @@ -803,19 +788,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "path-parse": { "version": "1.0.7", @@ -838,62 +813,52 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -912,12 +877,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -930,14 +895,19 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" } } } diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index be0b0b6110..a3ecdbed82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.10.1' }); Npm.depends({ - '@meteorjs/babel': '7.16.1-beta.0', + '@meteorjs/babel': '7.17.2-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/email.js b/packages/email/email.js index 3f64e23692..eed8dbd9b3 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -2,7 +2,6 @@ import { Meteor } from 'meteor/meteor'; import { Log } from 'meteor/logging'; import { Hook } from 'meteor/callback-hook'; -import Future from 'fibers/future'; import url from 'url'; import nodemailer from 'nodemailer'; import wellKnow from 'nodemailer/lib/well-known'; @@ -25,7 +24,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function(mailUrlString) { +const makeTransport = function (mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -60,7 +59,7 @@ const makeTransport = function(mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function(settings = undefined, url = undefined) { +const knownHostsTransport = function (settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -110,7 +109,7 @@ const knownHostsTransport = function(settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function() { +const getTransport = function () { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -138,40 +137,40 @@ const getTransport = function() { }; let nextDevModeMailId = 0; -let output_stream = process.stdout; + +EmailTest._getAndIncNextDevModeMailId = function () { + return nextDevModeMailId++; +}; // Testing hooks -EmailTest.overrideOutputStream = function(stream) { +EmailTest.resetNextDevModeMailId = function () { nextDevModeMailId = 0; - output_stream = stream; }; -EmailTest.restoreOutputStream = function() { - output_stream = process.stdout; -}; +const devModeSendAsync = function (mail, options) { + const stream = options?.stream || process.stdout; + return new Promise((resolve, reject) => { + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); -const devModeSend = function(mail) { - let devModeMailId = nextDevModeMailId++; - - const stream = output_stream; - - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + + // This approach does not prevent other writers to stdout from interleaving. + const output = ['====== BEGIN MAIL #' + devModeMailId + ' ======\n']; + output.push( + '(Mail not sent; to enable sending, set the MAIL_URL ' + 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - const future = new Future(); - readStream.on('end', function() { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - future.return(); + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.on('data', buffer => { + output.push(buffer.toString()); + }); + readStream.on('end', function () { + output.push('====== END MAIL #' + devModeMailId + ' ======\n'); + stream.write(output.join(''), () => resolve()); + }); + readStream.on('error', (err) => reject(err)); }); - future.wait(); }; -const smtpSend = function(transport, mail) { +const smtpSend = function (transport, mail) { transport._syncSendMail(mail); }; @@ -186,7 +185,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function(f) { +Email.hookSend = function (f) { return sendHooks.register(f); }; @@ -231,25 +230,77 @@ Email.customTransport = undefined; * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function(options) { - if (options.mailComposer) { - options = options.mailComposer.mail; +Email.send = function (options) { + if (Email.customTransport) { + // Preserve current behavior + const email = options.mailComposer ? options.mailComposer.mail : options; + let send = true; + sendHooks.forEach((hook) => { + send = hook(email); + return send; + }); + if (!send) { + return; + } + const packageSettings = Meteor.settings.packages?.email || {}; + Email.customTransport({ packageSettings, ...email }); + return; } + // Using Fibers Promise.await + return Promise.await(Email.sendAsync(options)); +}; + +/** + * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server + * or if mail server returns an error. All fields should match + * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. + * + * If the `MAIL_URL` environment variable is set, actually sends the email. + * Otherwise, prints the contents of the email to standard out. + * + * Note that this package is based on **nodemailer**, so make sure to refer to + * [the documentation](http://nodemailer.com/) + * when using the `attachments` or `mailComposer` options. + * + * @locus Server + * @return {Promise} + * @param {Object} options + * @param {String} [options.from] "From:" address (required) + * @param {String|String[]} options.to,cc,bcc,replyTo + * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses + * @param {String} [options.inReplyTo] Message-ID this message is replying to + * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to + * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value + * @param {String} [options.subject] "Subject:" line + * @param {String} [options.text|html] Mail body (in plain text and/or HTML) + * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch + * @param {String} [options.icalEvent] iCalendar event attachment + * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. + * @param {Object[]} [options.attachments] Array of attachment objects, as + * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). + * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * object representing the message to be sent. Overrides all other options. + * You can create a `MailComposer` object via + * `new EmailInternals.NpmModules.mailcomposer.module`. + */ +Email.sendAsync = async function (options) { + + const email = options.mailComposer ? options.mailComposer.mail : options; let send = true; - sendHooks.forEach(hook => { - send = hook(options); + sendHooks.forEach((hook) => { + send = hook(email); return send; }); - if (!send) return; - - const customTransport = Email.customTransport; - if (customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - customTransport({ packageSettings, ...options }); + if (!send) { return; } + if (Email.customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + return Email.customTransport({ packageSettings, ...email }); + } + const mailUrlEnv = process.env.MAIL_URL; const mailUrlSettings = Meteor.settings.packages?.email; @@ -263,8 +314,8 @@ Email.send = function(options) { if (mailUrlEnv || mailUrlSettings) { const transport = getTransport(); - smtpSend(transport, options); + smtpSend(transport, email); return; } - devModeSend(options); + return devModeSendAsync(email, options); }; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js new file mode 100644 index 0000000000..a8706ab1c9 --- /dev/null +++ b/packages/email/email_test_helpers.js @@ -0,0 +1,21 @@ +import streamBuffers from 'stream-buffers'; + +export const devWarningBanner = + '(Mail not sent; to enable ' + + 'sending, set the MAIL_URL environment variable.)\n'; + +export const smokeEmailTest = (testFunction) => { + // This only tests dev mode, so don't run the test if this is deployed. + if (process.env.MAIL_URL) return; + const stream = new streamBuffers.WritableStreamBuffer(); + EmailTest.resetNextDevModeMailId(); + testFunction(stream); +}; + +export const canonicalize = (string) => { + // Remove generated content for test.equal to succeed. + return string + .replace(/Message-ID: <[^<>]*>\r\n/, 'Message-ID: <...>\r\n') + .replace(/Date: (?!dummy).*\r\n/, 'Date: ...\r\n') + .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/gm, '$1--...$2'); +}; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 877264ce95..6f016f26b9 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,304 +1,85 @@ -import streamBuffers from 'stream-buffers'; +import { Email } from 'meteor/email'; +import { smokeEmailTest } from './email_test_helpers'; +import { TEST_CASES } from './email_tests_data'; -const devWarningBanner = "(Mail not sent; to enable " + - "sending, set the MAIL_URL environment variable.)\n"; +const CUSTOM_TRANSPORT_SETTINGS = { + email: { service: '1on1', user: 'test', password: 'pwd' }, +}; -function smokeEmailTest(testFunction) { - // This only tests dev mode, so don't run the test if this is deployed. - if (process.env.MAIL_URL) return; +const sleep = (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; - try { - const stream = new streamBuffers.WritableStreamBuffer; - EmailTest.overrideOutputStream(stream); +// Create dynamic sync tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.add(`[Sync] ${title}`, function (test) { + smokeEmailTest((stream) => { + Object.entries(options).forEach(([key, option]) => { + const testCall = testCalls[key]; + Email.send({ ...option, stream }); + testCall(test, stream); + }); + }); + }); +}); - testFunction(stream); +// Create dynamic async tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { + smokeEmailTest((stream) => { + const allPromises = Object.entries(options).map(([key, option]) => { + const testCall = testCalls[key]; + return Email.sendAsync({ ...option, stream }).then(() => { + testCall(test, stream); + }); + }); + Promise.all(allPromises).then(() => onComplete()); + }); + }); +}); - } finally { - EmailTest.restoreOutputStream(); +// Individual sync tests + +Tinytest.add( + '[Sync] email - alternate API is used for sending gets data', + function (test) { + smokeEmailTest(function (stream) { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }); + test.equal(stream.getContentsAsString('utf8'), false); + }); + + smokeEmailTest(function (stream) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }); + + test.equal(stream.getContentsAsString('utf8'), false); + }); + Email.customTransport = undefined; + Meteor.settings.packages = undefined; } -} +); -function canonicalize(string) { - // Remove generated content for test.equal to succeed. - return string.replace(/Message-ID: <[^<>]*>\r\n/, "Message-ID: <...>\r\n") - .replace(/Date: (?!dummy).*\r\n/, "Date: ...\r\n") - .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); -} - -Tinytest.add("email - fully customizable", function (test) { - smokeEmailTest(function(stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - cc: ["friends@example.com", "enemies@example.com"], - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - 'Date': 'dummy', - }, - }); - // XXX brittle if mailcomposer changes header order, etc - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "X-Meteor-Test: a custom header\r\n" + - "Date: dummy\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Cc: friends@example.com, enemies@example.com\r\n" + - "Subject: This is the subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is the body\n" + - "of the message\n" + - "From us.\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - undefined headers sends properly", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m); - }); -}); - -Tinytest.add("email - multiple e-mails same stream", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - const contents = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); - test.matches(contents, /^From: foo@example.com$/m); - test.matches(contents, /^To: bar@example.com$/m); - - Email.send({ - from: "qux@example.com", - to: "baz@example.com", - subject: "This is important", - text: "This is another message\nFrom Qux.", - }); - - const contents2 = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); - test.matches(contents2, /^From: qux@example.com$/m); - test.matches(contents2, /^To: baz@example.com$/m); - - }); -}); - -Tinytest.add("email - using mail composer", function (test) { - smokeEmailTest(function (stream) { - // Test direct MailComposer usage. - const mc = new EmailInternals.NpmModules.mailcomposer.module({ - from: "a@b.com", - text: "body" - }); - Email.send({mailComposer: mc}); - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: a@b.com\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "body\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - date auto generated", function (test) { - smokeEmailTest(function (stream) { - // Test if date header is automatically generated, if not specified - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - }, - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^Date: .+$/m); - }); -}); - -Tinytest.add("email - long lines", function (test) { - smokeEmailTest(function (stream) { - // Test that long header lines get wrapped with single leading whitespace, - // and that long body lines get wrapped with quoted-printable conventions. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is a very very very very very very very very very very very very long subject", - text: "This is a very very very very very very very very very very very very long text", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: This is a very very very very very very very very " + - "very very very\r\n very long subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is a very very very very very very very very very very " + - "very very long =\r\ntext\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - unicode", function (test) { - smokeEmailTest(function (stream) { - // Test that unicode characters in header and body get encoded. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "\u263a", - text: "I \u2665 Meteor", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: =?UTF-8?B?4pi6?=\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "I =E2=99=A5 Meteor\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - text and html", function (test) { - smokeEmailTest(function (stream) { - // Test including both text and HTML versions of message. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: multipart/alternative;\r\n" + - ' boundary="--...-Part_1"\r\n' + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Message-ID: <...>\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/plain; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "*Cool*, man\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/html; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "Cool, man\r\n" + - "----...-Part_1--\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - alternate API is used for sending gets data", function(test) { - smokeEmailTest(function(stream) { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - test.equal(stream.getContentsAsString("utf8"), false); - }); - - smokeEmailTest(function(stream) { - Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' } }; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(stream.getContentsAsString("utf8"), false); - }); - Email.customTransport = undefined; - Meteor.settings.packages = undefined; -}); - -Tinytest.add("email - URL string for known hosts", function(test) { - const oneTransport = EmailTest.knowHostsTransport({ service: '1und1', user: 'test', password: 'pwd' }); - test.equal(oneTransport.transporter.auth.type, 'LOGIN'); - test.equal(oneTransport.transporter.auth.user, 'test'); - - const aolUrlTransport = EmailTest.knowHostsTransport(null, 'AOL://test:pwd@aol.com'); - test.equal(aolUrlTransport.transporter.auth.user, 'test'); - test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); - - const outlookTransport = EmailTest.knowHostsTransport(null, 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com'); - const outlookTransport2 = EmailTest.knowHostsTransport(undefined, 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com'); - test.equal(outlookTransport.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.options.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.transporter.options.service, 'outlook365'); - test.equal(outlookTransport2.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport2.transporter.options.service, 'outlook365'); - - const hotmailTransport = EmailTest.knowHostsTransport(undefined, 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com'); - console.dir(hotmailTransport); - test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - - const falseService = { service: '1on1', user: 'test', password: 'pwd' }; - const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; - test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); - test.throws(() => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), errorMsg); -}); - -Tinytest.add("email - hooks stop the sending", function(test) { +Tinytest.add('[Sync] email - hooks stop the sending', function (test) { // Register hooks const hook1 = Email.hookSend((options) => { // Test that we get options through @@ -313,17 +94,218 @@ Tinytest.add("email - hooks stop the sending", function(test) { const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(function(stream) { + smokeEmailTest(function (stream) { Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, }); - test.equal(stream.getContentsAsString("utf8"), false); + test.equal(stream.getContentsAsString('utf8'), false); }); hook1.stop(); hook2.stop(); hook3.stop(); }); + +// Individual Async tests + +Tinytest.addAsync( + '[Async] email - alternate API is used for sending gets data', + function (test, onComplete) { + const allPromises = []; + smokeEmailTest((stream) => { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + + smokeEmailTest(function (stream) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + Promise.all(allPromises).then(() => { + Email.customTransport = undefined; + Meteor.settings.packages = undefined; + onComplete(); + }); + } +); + +Tinytest.addAsync( + '[Async] email - hooks stop the sending', + function (test, onComplete) { + // Register hooks + const hook1 = Email.hookSend((options) => { + // Test that we get options through + test.equal(options.from, 'foo@example.com'); + console.log('EXECUTE'); + return true; + }); + const hook2 = Email.hookSend(() => { + console.log('STOP'); + return false; + }); + const hook3 = Email.hookSend(() => { + console.log('FAIL'); + }); + smokeEmailTest((stream) => { + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + hook1.stop(); + hook2.stop(); + hook3.stop(); + onComplete(); + }); + }); + } +); + +// Another tests + +Tinytest.add('[Sync] email - URL string for known hosts', function (test) { + const oneTransport = EmailTest.knowHostsTransport({ + service: '1und1', + user: 'test', + password: 'pwd', + }); + test.equal(oneTransport.transporter.auth.type, 'LOGIN'); + test.equal(oneTransport.transporter.auth.user, 'test'); + + const aolUrlTransport = EmailTest.knowHostsTransport( + null, + 'AOL://test:pwd@aol.com' + ); + test.equal(aolUrlTransport.transporter.auth.user, 'test'); + test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); + + const outlookTransport = EmailTest.knowHostsTransport( + null, + 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com' + ); + const outlookTransport2 = EmailTest.knowHostsTransport( + undefined, + 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com' + ); + test.equal( + outlookTransport.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal( + outlookTransport.options.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport.transporter.options.service, 'outlook365'); + test.equal( + outlookTransport2.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport2.transporter.options.service, 'outlook365'); + + const hotmailTransport = EmailTest.knowHostsTransport( + undefined, + 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com' + ); + console.dir(hotmailTransport); + test.equal(hotmailTransport.transporter.options.service, 'hotmail'); + + const falseService = CUSTOM_TRANSPORT_SETTINGS.email; + const errorMsg = + 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; + test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); + test.throws( + () => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), + errorMsg + ); +}); + +Tinytest.addAsync( + '[Async] email - with custom transport exception', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + throw new Meteor.Error('Expected error'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }).catch((err) => { + test.equal(err.error, 'Expected error'); + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Async] email - with custom transport long time running', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Sync] email - with custom transport long time running', + function (test, onComplete) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + onComplete(); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + } +); diff --git a/packages/email/email_tests_data.js b/packages/email/email_tests_data.js new file mode 100644 index 0000000000..095c1fb9d2 --- /dev/null +++ b/packages/email/email_tests_data.js @@ -0,0 +1,254 @@ +import { canonicalize, devWarningBanner } from './email_test_helpers'; + +export const TEST_CASES = [ + { + title: 'email - fully customizable', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + cc: ['friends@example.com', 'enemies@example.com'], + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + Date: 'dummy', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + // XXX brittle if mailcomposer changes header order, etc + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'X-Meteor-Test: a custom header\r\n' + + 'Date: dummy\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Cc: friends@example.com, enemies@example.com\r\n' + + 'Subject: This is the subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is the body\n' + + 'of the message\n' + + 'From us.\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - undefined headers sends properly', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m + ); + }, + }, + }, + { + title: 'email - multiple e-mails same stream', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + 1: { + from: 'qux@example.com', + to: 'baz@example.com', + subject: 'This is important', + text: 'This is another message\nFrom Qux.', + }, + }, + + testCalls: { + 0: (test, stream) => { + const contents = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); + test.matches(contents, /^From: foo@example.com$/m); + test.matches(contents, /^To: bar@example.com$/m); + }, + 1: (test, stream) => { + const contents2 = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); + test.matches(contents2, /^From: qux@example.com$/m); + test.matches(contents2, /^To: baz@example.com$/m); + }, + }, + }, + { + title: 'email - using mail composer', + options: { + 0: { + mailComposer: new EmailInternals.NpmModules.mailcomposer.module({ + from: 'a@b.com', + text: 'body', + }), + }, + }, + + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: a@b.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'body\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - date auto generated', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^Date: .+$/m + ); + }, + }, + }, + { + title: 'email - long lines', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: + 'This is a very very very very very very very very very very very very long subject', + text: 'This is a very very very very very very very very very very very very long text', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: This is a very very very very very very very very ' + + 'very very very\r\n very long subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is a very very very very very very very very very very ' + + 'very very long =\r\ntext\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - unicode', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: '\u263a', + text: 'I \u2665 Meteor', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: =?UTF-8?B?4pi6?=\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'I =E2=99=A5 Meteor\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - text and html', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: multipart/alternative;\r\n' + + ' boundary="--...-Part_1"\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + '*Cool*, man\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/html; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + 'Cool, man\r\n' + + '----...-Part_1--\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, +]; + diff --git a/packages/email/package.js b/packages/email/package.js index 326bad392a..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.2', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index c2964cf842..d9c824f27f 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -4,13 +4,13 @@ import { Accounts } from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; -Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { +Facebook.handleAuthFromAccessToken = async (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'middle_name', 'name_format', 'picture', 'short_name']; - const identity = getIdentity(accessToken, whitelisted); + const identity = await getIdentity(accessToken, whitelisted); const fields = {}; whitelisted.forEach(field => fields[field] = identity[field]); @@ -34,8 +34,8 @@ Accounts.registerLoginHandler(request => { return Accounts.updateOrCreateUserFromExternalService('facebook', facebookData.serviceData, facebookData.options); }); -OAuth.registerService('facebook', 2, null, query => { - const response = getTokenResponse(query); +OAuth.registerService('facebook', 2, null, async query => { + const response = await getTokenResponse(query); const { accessToken } = response; const { expiresIn } = response; @@ -52,7 +52,7 @@ function getAbsoluteUrlOptions(query) { const redirectUrl = new URL(state.redirectUrl); return { rootUrl: redirectUrl.origin, - } + }; } catch (e) { console.error( `Failed to complete OAuth handshake with Facebook because it was not able to obtain the redirect url from the state and you are using overrideRootUrlFromStateRedirectUrl.`, e @@ -61,73 +61,86 @@ function getAbsoluteUrlOptions(query) { } } -// returns an object containing: -// - accessToken -// - expiresIn: lifetime of token in seconds -const getTokenResponse = query => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +/** + * @typedef {Object} UserAccessToken + * @property {string} accessToken - User access Token + * @property {number} expiresIn - lifetime of token in seconds + */ +/** + * @async + * @function getTokenResponse + * @param {Object} query - An object with the code. + * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) + */ +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - let responseContent; - try { + const absoluteUrlOptions = getAbsoluteUrlOptions(query); + const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - const absoluteUrlOptions = getAbsoluteUrlOptions(query); - const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - // Request an access token - responseContent = HTTP.get( - `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { - params: { - client_id: config.appId, - redirect_uri: redirectUri, - client_secret: OAuth.openSecret(config.secret), - code: query.code - } - }).data; - } catch (err) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), - { response: err.response }, - ); - } - - const fbAccessToken = responseContent.access_token; - const fbExpires = responseContent.expires_in; - - if (!fbAccessToken) { - throw new Error("Failed to complete OAuth handshake with facebook " + - `-- can't find access token in HTTP response. ${responseContent}`); - } - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; + return OAuth._fetch( + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, + 'GET', + { + queryParams: { + client_id: config.appId, + redirect_uri: redirectUri, + client_secret: OAuth.openSecret(config.secret), + code: query.code, + }, + } + ) + .then((res) => res.json()) + .then(data => { + const fbAccessToken = data.access_token; + const fbExpires = data.expires_in; + if (!fbAccessToken) { + throw new Error("Failed to complete OAuth handshake with facebook " + + `-- can't find access token in HTTP response. ${data}`); + } + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; + }) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Facebook. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = (accessToken, fields) => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getIdentity = async (accessToken, fields) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); // Generate app secret proof that is a sha256 hash of the app access token, with the app secret as the key // https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof const hmac = crypto.createHmac('sha256', OAuth.openSecret(config.secret)); hmac.update(accessToken); - try { - return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { - params: { - access_token: accessToken, - appsecret_proof: hmac.digest('hex'), - fields: fields.join(",") - } - }).data; - } catch (err) { - throw Object.assign( - new Error(`Failed to fetch identity from Facebook. ${err.message}`), - { response: err.response }, - ); - } + return OAuth._fetch(`https://graph.facebook.com/v${API_VERSION}/me`, 'GET', { + queryParams: { + access_token: accessToken, + appsecret_proof: hmac.digest('hex'), + fields: fields.join(','), + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error(`Failed to fetch identity from Facebook. ${err.message}`), + { response: err.response } + ); + }); }; Facebook.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 5df363643a..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1' + version: '1.11.2' }); Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/github-oauth/github_server.js b/packages/github-oauth/github_server.js index b71995d1c0..7b4f36f5f6 100644 --- a/packages/github-oauth/github_server.js +++ b/packages/github-oauth/github_server.js @@ -1,12 +1,9 @@ Github = {}; -OAuth.registerService('github', 2, null, (query) => { - const accessTokenCall = Meteor.wrapAsync(getAccessToken); - const accessToken = accessTokenCall(query); - const identityCall = Meteor.wrapAsync(getIdentity); - const identity = identityCall(accessToken); - const emailsCall = Meteor.wrapAsync(getEmails); - const emails = emailsCall(accessToken); +OAuth.registerService('github', 2, null, async (query) => { + const accessToken = await getAccessToken(query); + const identity = await getIdentity(accessToken); + const emails = await getEmails(accessToken); const primaryEmail = emails.find((email) => email.primary); return { @@ -31,7 +28,7 @@ OAuth.registerService('github', 2, null, (query) => { let userAgent = 'Meteor'; if (Meteor.release) userAgent += `/${Meteor.release}`; -const getAccessToken = async (query, callback) => { +const getAccessToken = async (query) => { const config = ServiceConfiguration.configurations.findOne({ service: 'github' }); @@ -68,18 +65,16 @@ const getAccessToken = async (query, callback) => { ); } if (response.error) { - callback(response.error); // if the http response was a json object with an error attribute throw new Error( `Failed to complete OAuth handshake with GitHub. ${response.error}` ); } else { - callback(null, response.access_token); return response.access_token; } }; -const getIdentity = async (accessToken, callback) => { +const getIdentity = async (accessToken) => { try { const request = await fetch('https://api.github.com/user', { method: 'GET', @@ -89,11 +84,8 @@ const getIdentity = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message); throw Object.assign( new Error(`Failed to fetch identity from Github. ${err.message}`), { response: err.response } @@ -101,7 +93,7 @@ const getIdentity = async (accessToken, callback) => { } }; -const getEmails = async (accessToken, callback) => { +const getEmails = async (accessToken) => { try { const request = await fetch('https://api.github.com/user/emails', { method: 'GET', @@ -111,11 +103,8 @@ const getEmails = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message, []); return []; } }; diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index de8e9415cb..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.0' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index d13c285914..a25637be75 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -5,40 +5,46 @@ import { fetch } from 'meteor/fetch'; const hasOwn = Object.prototype.hasOwnProperty; // https://developers.google.com/accounts/docs/OAuth2Login#userinfocall -Google.whitelistedFields = ['id', 'email', 'verified_email', 'name', 'given_name', - 'family_name', 'picture', 'locale', 'timezone', 'gender']; +Google.whitelistedFields = [ + 'id', + 'email', + 'verified_email', + 'name', + 'given_name', + 'family_name', + 'picture', + 'locale', + 'timezone', + 'gender', +]; -const getServiceDataFromTokens = tokens => { +const getServiceDataFromTokens = async (tokens, callback) => { const { accessToken, idToken } = tokens; - const scopesCall = Meteor.wrapAsync(getScopes); - let scopes; - try { - scopes = scopesCall(accessToken); - } catch (err) { - throw Object.assign( + const scopes = await getScopes(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch tokeninfo from Google. ${err.message}`), { response: err.response } ); - } - const identityCall = Meteor.wrapAsync(getIdentity); - let identity; - try { - identity = identityCall(accessToken); - } catch (err) { - throw Object.assign( + callback && callback(error); + throw error; + }); + + let identity = await getIdentity(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch identity from Google. ${err.message}`), { response: err.response } ); - } + callback && callback(error); + throw error; + }); const serviceData = { accessToken, idToken, - scope: scopes + scope: scopes, }; - if (hasOwn.call(tokens, "expiresIn")) { - serviceData.expiresAt = - Date.now() + 1000 * parseInt(tokens.expiresIn, 10); + if (hasOwn.call(tokens, 'expiresIn')) { + serviceData.expiresAt = Date.now() + 1000 * parseInt(tokens.expiresIn, 10); } const fields = Object.create(null); @@ -56,22 +62,25 @@ const getServiceDataFromTokens = tokens => { if (tokens.refreshToken) { serviceData.refreshToken = tokens.refreshToken; } - - return { + const returnValue = { serviceData, options: { profile: { - name: identity.name - } - } + name: identity.name, + }, + }, }; + + callback && callback(undefined, returnValue); + + return returnValue; }; -Accounts.registerLoginHandler(request => { +Accounts.registerLoginHandler(async (request) => { if (request.googleSignIn !== true) { return; } - + console.log({ request }); const tokens = { accessToken: request.accessToken, refreshToken: request.refreshToken, @@ -79,29 +88,38 @@ Accounts.registerLoginHandler(request => { }; if (request.serverAuthCode) { - Object.assign(tokens, getTokens({ - code: request.serverAuthCode - })); + Object.assign( + tokens, + await getTokens({ + code: request.serverAuthCode, + }) + ); } let result; try { - result = getServiceDataFromTokens(tokens); + result = await getServiceDataFromTokens(tokens); } catch (err) { throw Object.assign( - new Error(`Failed to complete OAuth handshake with Google. ${err.message}`), + new Error( + `Failed to complete OAuth handshake with Google. ${err.message}` + ), { response: err.response } ); } - - return Accounts.updateOrCreateUserFromExternalService("google", { - id: request.userId, - idToken: request.idToken, - accessToken: request.accessToken, - email: request.email, - picture: request.imageUrl, - ...result.serviceData, - }, result.options); + console.log({ result }); + return Accounts.updateOrCreateUserFromExternalService( + 'google', + { + id: request.userId, + idToken: request.idToken, + accessToken: request.accessToken, + email: request.email, + picture: request.imageUrl, + ...result.serviceData, + }, + result.options + ); }); // returns an object containing: @@ -109,45 +127,48 @@ Accounts.registerLoginHandler(request => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request const getTokens = async (query, callback) => { - const config = ServiceConfiguration.configurations.findOne({service: 'google'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({ + service: 'google', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); const content = new URLSearchParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('google', config), - grant_type: 'authorization_code' + grant_type: 'authorization_code', + }); + const request = await fetch('https://accounts.google.com/o/oauth2/token', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: content, }); - const request = await fetch( - "https://accounts.google.com/o/oauth2/token", { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: content, - }); const response = await request.json(); - if (response.error) { // if the http response was a json object with an error attribute - callback(response.error); - throw new Meteor.Error(`Failed to complete OAuth handshake with Google. ${response.error}`); + if (response.error) { + // if the http response was a json object with an error attribute + callback && callback(response.error); + throw new Meteor.Error( + `Failed to complete OAuth handshake with Google. ${response.error}` + ); } else { const data = { accessToken: response.access_token, refreshToken: response.refresh_token, expiresIn: response.expires_in, - idToken: response.id_token + idToken: response.id_token, }; - callback(undefined, data); + callback && callback(undefined, data); return data; } }; -const getTokensCall = Meteor.wrapAsync(getTokens); -const getServiceData = query => getServiceDataFromTokens(getTokensCall(query)); +const getServiceData = async (query) => + getServiceDataFromTokens(await getTokens(query)); OAuth.registerService('google', 2, null, getServiceData); @@ -159,14 +180,15 @@ const getIdentity = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/userinfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response); + callback && callback(undefined, response); return response; }; @@ -178,14 +200,15 @@ const getScopes = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/tokeninfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response.scope.split(' ')); + callback && callback(undefined, response.scope.split(' ')); return response.scope.split(' '); }; diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 102f60b0ac..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.2", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index cffa8da9e5..bfc465c7b3 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -1,10 +1,10 @@ Meetup = {}; -OAuth.registerService('meetup', 2, null, query => { - const response = getAccessToken(query); +OAuth.registerService('meetup', 2, null, async query => { + const response = await getAccessToken(query); const accessToken = response.access_token; const expiresAt = (+new Date) + (1000 * response.expires_in); - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const { id, name, @@ -33,50 +33,63 @@ OAuth.registerService('meetup', 2, null, query => { }; }); -const getAccessToken = query => { +const getAccessToken = async query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - grant_type: 'authorization_code', - redirect_uri: OAuth._redirectUri('meetup', config), - state: query.state - }}); - } catch (err) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), - { response: err.response } - ); - } + const body = OAuth._addValuesToQueryParams({ + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + grant_type: 'authorization_code', + redirect_uri: OAuth._redirectUri('meetup', config), + state: query.state + }); - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Meetup. ${response.data.error}`); - } else { - return response.data; - } + return OAuth._fetch('https://secure.meetup.com/oauth2/access', 'POST', { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + }) + .then(data => data.json()) + .then(data => { + if (data.error) { + throw new Error(`Failed to complete OAuth handshake with Meetup. ${data.error.message}`); + } + return data; + }) + .catch(err => { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), + { response: err.response }, + ); + }); }; -const getIdentity = accessToken => { - try { - const response = HTTP.get( - "https://api.meetup.com/2/members", - {params: {member_id: 'self', access_token: accessToken}}); - return response.data.results && response.data.results[0]; - } catch (err) { +const getIdentity = async accessToken => { + const body = OAuth._addValuesToQueryParams({ + member_id: 'self', + access_token: accessToken + }); + + return OAuth._fetch('https://api.meetup.com/2/members', 'POST', { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + }).then(data => data.json()) + .then(({results = []}) => results.length && results[0]) + .catch(err => { throw Object.assign( new Error(`Failed to fetch identity from Meetup. ${err.message}`), { response: err.response } ); - } + }); }; - Meetup.retrieveCredential = (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 83df9f74a3..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.1' + version: '1.1.2' }); Package.onUse(api => { api.use('ecmascript'); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', 'server'); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index c563ba47e8..57dd193ae1 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -1,7 +1,7 @@ -OAuth.registerService("meteor-developer", 2, null, query => { - const response = getTokens(query); +OAuth.registerService("meteor-developer", 2, null, async query => { + const response = await getTokens(query); const { accessToken } = response; - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const serviceData = { accessToken: OAuth.sealSecret(accessToken), @@ -28,69 +28,77 @@ OAuth.registerService("meteor-developer", 2, null, query => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = query => { +const getTokens = async (query) => { const config = ServiceConfiguration.configurations.findOne({ - service: 'meteor-developer' + service: 'meteor-developer', }); - if (!config) + if (!config) { throw new ServiceConfiguration.ConfigError(); + } - let response; - try { - response = HTTP.post( - MeteorDeveloperAccounts._server + "/oauth2/token", { - params: { - grant_type: "authorization_code", - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('meteor-developer', config) - } + const body = OAuth._addValuesToQueryParams({ + grant_type: 'authorization_code', + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('meteor-developer', config), + }).toString(); + + return OAuth._fetch( + MeteorDeveloperAccounts._server + '/oauth2/token', + 'POST', + { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + } + ) + .then((data) => data.json()) + .then((data) => { + if (data.error) { + throw new Error( + 'Failed to complete OAuth handshake with Meteor developer accounts. ' + + (data ? data.error : 'No response data') + ); } - ); - } catch (err) { - throw Object.assign( - new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " - + err.message - ), - {response: err.response} - ); - } - - if (! response.data || response.data.error) { - // if the http response was a json object with an error attribute - throw new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " + - (response.data ? response.data.error : - "No response data") - ); - } else { - return { - accessToken: response.data.access_token, - refreshToken: response.data.refresh_token, - expiresIn: response.data.expires_in - }; - } + return { + accessToken: data.access_token, + refreshToken: data.refresh_token, + expiresIn: data.expires_in, + }; + }) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = accessToken => { - try { - return HTTP.get( - `${MeteorDeveloperAccounts._server}/api/v1/identity`, - { - headers: { Authorization: `Bearer ${accessToken}`} - } - ).data; - } catch (err) { - throw Object.assign( - new Error("Failed to fetch identity from Meteor developer accounts. " + - err.message), - {response: err.response} - ); - } +const getIdentity = async (accessToken) => { + return OAuth._fetch( + `${MeteorDeveloperAccounts._server}/api/v1/identity`, + 'GET', + { + headers: { Authorization: `Bearer ${accessToken}` }, + } + ) + .then((data) => data.json()) + .catch((err) => { + throw Object.assign( + new Error( + 'Failed to fetch identity from Meteor developer accounts. ' + + err.message + ), + { response: err.response } + ); + }); }; -MeteorDeveloperAccounts.retrieveCredential = - (credentialToken, credentialSecret) => +MeteorDeveloperAccounts.retrieveCredential = + (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index b1463542d5..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,12 +1,11 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.1' + version: '1.3.2' }); Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index eddeaa008c..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.2', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js new file mode 100644 index 0000000000..27d9b227cb --- /dev/null +++ b/packages/meteor/asl-helpers.js @@ -0,0 +1,22 @@ +const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {}; +const getValueFromAslStore = key => getAslStore()[key]; +const updateAslStore = (key, value) => getAslStore()[key] = value; + +Meteor._isFibersEnabled = !process.env.DISABLE_FIBERS && Meteor.isServer; +Meteor._getAslStore = getAslStore; +Meteor._getValueFromAslStore = getValueFromAslStore; +Meteor._updateAslStore = updateAslStore; + +Meteor._runAsync = (fn, ctx) => { + if (Meteor._isFibersEnabled) { + const Fiber = Npm.require('fibers'); + + return Fiber(() => { + fn.call(ctx); + }).run(); + } + + global.asyncLocalStorage.run(Meteor._getAslStore(), () => { + fn.call(ctx); + }); +}; diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index ad28064003..242921945c 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -71,6 +71,38 @@ Meteor._delete = function (obj /*, arguments */) { } }; + +/** + * 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 + * @returns {function(...[*]): Promise} + */ +Meteor.promisify = function (fn, context, errorFirst = true) { + return function (...fnArgs) { + return new Promise((resolve, reject) => { + const callback = Meteor.bindEnvironment((error, result) => { + let _error = error, _result = result; + if (!errorFirst) { + _error = result; + _result = error; + } + + if (_error) { + return reject(_error); + } + + resolve(_result); + }); + + const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined); + return fn.apply(context || this, filteredArgs); + }); + }; +}; + // wrapAsync can wrap any function that takes some number of arguments that // can't be undefined, followed by some optional arguments, where the callback // is the last optional argument. @@ -171,5 +203,3 @@ function logErr(err) { ); } } - -Meteor._isFibersEnabled = global._isFibersEnabled; diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index 0a482c0aa9..eb08d994bd 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,12 +147,19 @@ export namespace Meteor { }): void; /** - * Invokes a method passing any number of arguments. + * Invokes a method with a sync stub, passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; + /** + * Invokes a method with an async stub, passing any number of arguments. + * @param name Name of method to invoke + * @param args Optional method arguments + */ + function callAsync(name: string, ...args: any[]): Promise; + function apply< Result extends | EJSONable @@ -434,7 +441,14 @@ export namespace Meteor { */ function publish( name: string | null, - func: (this: Subscription, ...args: any[]) => void, + func: ( + this: Subscription, + ...args: any[] + ) => + | void + | Mongo.Cursor + | Mongo.Cursor[] + | Promise | Mongo.Cursor[]>, options?: { is_auto: boolean } ): void; diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 930478dc07..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.2' + version: '1.10.3' }); Package.registerBuildPlugin({ @@ -33,6 +33,7 @@ Package.onUse(function (api) { api.addFiles('setimmediate.js', ['client', 'server']); api.addFiles('timers.js', ['client', 'server']); api.addFiles('errors.js', ['client', 'server']); + api.addFiles('asl-helpers.js', 'server'); api.addFiles('fiber_helpers.js', 'server'); api.addFiles('fiber_stubs_client.js', 'client'); api.addFiles('startup_client.js', ['client']); @@ -54,8 +55,6 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); - - api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js new file mode 100644 index 0000000000..755595ba6e --- /dev/null +++ b/packages/minifier-css/minifier-async-tests.js @@ -0,0 +1,51 @@ +import { CssTools } from './minifier'; +const TEST_CASES = [ + ['a \t\n{ color: red } \n', 'a{color:red}', 'whitespace check'], + [ + 'a \t\n{ color: red; margin: 1; } \n', + 'a{color:red;margin:1}', + 'only last one loses semicolon', + ], + [ + 'a \t\n{ color: red;;; margin: 1;;; } \n', + 'a{color:red;margin:1}', + 'more semicolons than needed', + ], + ['a , p \t\n{ color: red; } \n', 'a,p{color:red}', 'multiple selectors'], + ['body {}', '', 'removing empty rules'], + [ + '*.my-class { color: #fff; }', + '.my-class{color:#fff}', + 'removing universal selector', + ], + [ + 'p > *.my-class { color: #fff; }', + 'p>.my-class{color:#fff}', + 'removing optional whitespace around ">" in selector', + ], + [ + 'p + *.my-class { color: #fff; }', + 'p+.my-class{color:#fff}', + 'removing optional whitespace around "+" in selector', + ], + [ + 'a {\n\ + font:12px \'Helvetica\',"Arial",\'Nautica\';\n\ + background:url("/some/nice/picture.png");\n}', + 'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}', + 'removing quotes in font and url (if possible)', + ], + ['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'], +]; + +Tinytest.addAsync( + '[Async] minifier-css - simple CSS minification', + async (test) => { + const promises = TEST_CASES.map(([css, expected, desc]) => + CssTools.minifyCssAsync(css).then((minifiedCss) => { + test.equal(minifiedCss[0], expected, desc); + }) + ); + return Promise.all(promises); + } +); diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index 174452f1ee..a4c662e9e5 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -1,6 +1,5 @@ import path from 'path'; import url from 'url'; -import Future from 'fibers/future'; import postcss from 'postcss'; import cssnano from 'cssnano'; @@ -65,23 +64,21 @@ const CssTools = { * @return {String[]} Array containing the minified CSS. */ minifyCss(cssText) { - const f = new Future; - postcss([ - cssnano({ safe: true }), - ]).process(cssText, { - from: void 0, - }).then(result => { - f.return(result.css); - }).catch(error => { - f.throw(error); - }); - const minifiedCss = f.wait(); + return Promise.await(CssTools.minifyCssAsync(cssText)); + }, - // Since this function has always returned an array, we'll wrap the - // minified css string in an array before returning, even though we're - // only ever returning one minified css string in that array (maintaining - // backwards compatibility). - return [minifiedCss]; + /** + * Minify the passed in CSS string. + * + * @param {string} cssText CSS string to minify. + * @return {Promise} Array containing the minified CSS. + */ + async minifyCssAsync(cssText) { + return await postcss([cssnano({ safe: true })]) + .process(cssText, { + from: void 0, + }) + .then((result) => [result.css]); }, /** @@ -187,6 +184,7 @@ if (typeof Profile !== 'undefined') { 'parseCss', 'stringifyCss', 'minifyCss', + 'minifyCssAsync', 'mergeCssAsts', 'rewriteCssUrls', ].forEach(funcName => { diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 022ed4c78c..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.1' + version: '1.6.2' }); Npm.depends({ @@ -19,6 +19,7 @@ Package.onTest(function (api) { api.use('tinytest'); api.addFiles([ 'minifier-tests.js', + 'minifier-async-tests.js', 'urlrewriting-tests.js' ], 'server'); }); diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 72a51cd67b..0c119a8f81 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,7 +39,11 @@ export default class Cursor { } /** - * @summary Returns the number of documents that match a query. + * @deprecated in 2.9 + * @summary Returns the number of documents that match a query. This method is + * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); + * see `Collection.countDocuments` and + * `Collection.estimatedDocumentCount` for a replacement. * @memberOf Mongo.Cursor * @method count * @instance diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index e3668eeb03..43877fb87e 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,6 +39,14 @@ export default class LocalCollection { this.paused = false; } + countDocuments(selector, options) { + return this.find(selector ?? {}, options).countAsync(); + } + + estimatedDocumentCount(options) { + return this.find({}, options).countAsync(); + } + // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 3b8e47fb2f..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.0' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 3dcc12dc96..d5b99edae4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,6 +319,33 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + /** + * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. + * @locus Anywhere + * @method countDocuments + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ + countDocuments(...args) { + return this._collection.countDocuments(...args); + }, + + /** + * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. + * @locus Anywhere + * @method estimatedDocumentCount + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ + estimatedDocumentCount(...args) { + return this._collection.estimatedDocumentCount(...args); + }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index 5d3a277fa0..d709cee26c 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,3 +19,14 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); + +['countDocuments', 'estimatedDocumentCount'].forEach(method => { + Tinytest.addAsync(`async collection - ${method}`, async test => { + const collection = new Mongo.Collection(method + test.id); + for (let index = 0; index < 10; ++index) { + test.instanceOf(collection[method](), Promise); + test.equal(await collection[method](), index); + collection.insert({}); + } + }); +}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 98a7017403..7b7b24ec00 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -826,6 +826,18 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; +MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); + const collection = this.rawCollection(collectionName); + return collection.countDocuments(...args); +}; + +MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); + const collection = this.rawCollection(collectionName); + return collection.estimatedDocumentCount(...args); +}; + MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 952a37478f..43c6e64411 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|u\d+)$/; +const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -96,7 +96,9 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (value === null) { + if (position[0] === 's') { + convertOplogDiff(oplogEntry, value, positionKey); + } else if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index f87c8877f3..79bcbada93 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,6 +77,71 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], + [ + { + $v: 2, + diff: { + sitems: { + a: true, + s0: { + u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, + sbio: { u: { en: 'Just Alice' } }, + slanguages: { + a: true, + s0: { + u: { englishName: 'English', key: 'en', localName: 'English' }, + }, + }, + }, + u1: { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { en: 'Fictional character', sv: '' }, + bio: { en: 'Just Bob', sv: '' }, + avatar: null, + languages: [ + { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, + ], + }, + u2: null + }, + }, + }, + { + $v: 2, + $set: { + 'items.0.id': 'm57DsX8g8L66bM5JX', + 'items.0.name': 'Alice', + 'items.0.bio.en': 'Just Alice', + 'items.0.languages.0.englishName': 'English', + 'items.0.languages.0.key': 'en', + 'items.0.languages.0.localName': 'English', + 'items.1': { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { + en: 'Fictional character', + sv: '', + }, + bio: { + en: 'Just Bob', + sv: '', + }, + avatar: null, + languages: [ + { + key: 'sv', + englishName: 'Swedish', + localName: 'Sverige', + }, + ], + }, + }, + $unset: { + 'items.2': true + } + }, + ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 5eb3cebb85..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index f237879de0..035af45157 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,13 +4,28 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; +const REMOTE_COLLECTION_METHODS = [ + '_createCappedCollection', + '_dropIndex', + '_ensureIndex', + 'createIndex', + 'countDocuments', + 'dropCollection', + 'estimatedDocumentCount', + 'find', + 'findOne', + 'insert', + 'rawCollection', + 'remove', + 'update', + 'upsert', +]; + Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - ['find', 'findOne', 'insert', 'update', 'upsert', - 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', - 'dropCollection', 'rawCollection'].forEach( + REMOTE_COLLECTION_METHODS.forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 11662ebe99..b276e22ce7 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,214 +62,224 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", - "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", + "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", - "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", + "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" }, "@aws-sdk/client-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", - "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", + "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", + "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" }, "@aws-sdk/client-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", - "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", + "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" }, "@aws-sdk/config-resolver": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", - "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", + "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", - "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", + "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" }, "@aws-sdk/credential-provider-env": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", - "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", + "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", - "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", + "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", - "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", + "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" }, "@aws-sdk/credential-provider-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", - "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", + "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" }, "@aws-sdk/credential-provider-process": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", - "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", + "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", - "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", + "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", - "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", + "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" }, "@aws-sdk/credential-providers": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", - "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", + "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", - "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", + "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" }, "@aws-sdk/hash-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", - "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", + "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" }, "@aws-sdk/invalid-dependency": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", - "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", + "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" }, "@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" }, "@aws-sdk/middleware-content-length": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", - "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", + "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", + "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" }, "@aws-sdk/middleware-host-header": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", - "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", + "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" }, "@aws-sdk/middleware-logger": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", - "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", + "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", - "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", + "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" }, "@aws-sdk/middleware-retry": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", - "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", + "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", - "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", + "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" }, "@aws-sdk/middleware-serde": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", - "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", + "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" }, "@aws-sdk/middleware-signing": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", - "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", + "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" }, "@aws-sdk/middleware-stack": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", - "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", + "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", - "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", + "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" }, "@aws-sdk/node-config-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", - "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", + "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" }, "@aws-sdk/node-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", - "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", + "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" }, "@aws-sdk/property-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", - "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", + "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" }, "@aws-sdk/protocol-http": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", - "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", + "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" }, "@aws-sdk/querystring-builder": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", - "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", + "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" }, "@aws-sdk/querystring-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", - "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", + "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" }, "@aws-sdk/service-error-classification": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", - "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", + "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", - "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", + "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" }, "@aws-sdk/signature-v4": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", - "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", + "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" }, "@aws-sdk/smithy-client": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", - "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", + "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" + }, + "@aws-sdk/token-providers": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", + "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" }, "@aws-sdk/types": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", - "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" }, "@aws-sdk/url-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", - "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", + "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" }, - "@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" - }, - "@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -277,59 +287,64 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" }, "@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" }, "@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", - "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", + "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", - "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", + "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" + }, + "@aws-sdk/util-endpoints": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", + "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" }, "@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" }, "@aws-sdk/util-middleware": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", - "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", + "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" }, "@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", - "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", + "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", - "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", + "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -337,14 +352,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", - "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", + "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" }, "@types/node": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", - "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -376,11 +391,6 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -402,14 +412,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", + "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" }, "mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" }, "punycode": { "version": "2.1.1", @@ -447,9 +457,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "uuid": { "version": "8.3.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 63696bf272..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0', + version: '4.12.1', documentation: null }); Npm.depends({ - mongodb: "4.11.0" + mongodb: "4.12.1" }); Package.onUse(function (api) { diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 6d7b0cb578..1b591a455b 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -136,7 +136,7 @@ OAuth._checkRedirectUrlOrigin = redirectUrl => { ); }; -const middleware = (req, res, next) => { +const middleware = async (req, res, next) => { let requestData; // Make sure to catch any exceptions because otherwise we'd crash @@ -168,7 +168,7 @@ const middleware = (req, res, next) => { requestData = req.body; } - handler(service, requestData, res); + await handler(service, requestData, res); } catch (err) { // if we got thrown an error, save it off, it will get passed to // the appropriate login call (if any) and reported there. @@ -473,3 +473,31 @@ OAuth.openSecrets = (serviceData, userId) => { ); return result; }; + +OAuth._addValuesToQueryParams = ( + values = {}, + queryParams = new URLSearchParams() +) => { + Object.entries(values).forEach(([key, value]) => { + queryParams.set(key, `${value}`); + }); + return queryParams; +}; + +OAuth._fetch = async ( + url, + method = 'GET', + { headers = {}, queryParams = {}, body, ...options } = {} +) => { + const urlWithParams = new URL(url); + + OAuth._addValuesToQueryParams(queryParams, urlWithParams.searchParams); + + const requestOptions = { + method: method.toUpperCase(), + headers, + ...(body ? { body } : {}), + ...options, + }; + return fetch(urlWithParams.toString(), requestOptions); +}; diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8962aeb282..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.2" + version: "2.1.3" }); Package.onUse(api => { @@ -11,6 +11,7 @@ Package.onUse(api => { api.use(['reload', 'base64'], 'client'); api.use('oauth-encryption', 'server', {weak: true}); + api.use('fetch', 'server'); api.export('OAuth'); diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index aab9629605..015553611e 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -19,12 +19,12 @@ export class OAuth1Binding { this._urls = urls; } - prepareRequestToken(callbackUrl) { + async prepareRequestToken(callbackUrl) { const headers = this._buildHeader({ oauth_callback: callbackUrl }); - const response = this._call('POST', this._urls.requestToken, headers); + const response = await this._call({method: 'POST', url: this._urls.requestToken, headers}); const tokens = querystring.parse(response.content); if (! tokens.oauth_callback_confirmed) @@ -35,7 +35,7 @@ export class OAuth1Binding { this.requestTokenSecret = tokens.oauth_token_secret; } - prepareAccessToken(query, requestTokenSecret) { + async prepareAccessToken(query, requestTokenSecret) { // support implementations that use request token secrets. This is // read by this._call. // @@ -50,7 +50,7 @@ export class OAuth1Binding { oauth_verifier: query.oauth_verifier }); - const response = this._call('POST', this._urls.accessToken, headers); + const response = await this._call({ method: 'POST', url: this._urls.accessToken, headers }); const tokens = querystring.parse(response.content); if (! tokens.oauth_token || ! tokens.oauth_token_secret) { @@ -66,7 +66,7 @@ export class OAuth1Binding { this.accessTokenSecret = tokens.oauth_token_secret; } - call(method, url, params, callback) { + async callAsync(method, url, params, callback) { const headers = this._buildHeader({ oauth_token: this.accessToken }); @@ -75,14 +75,29 @@ export class OAuth1Binding { params = {}; } - return this._call(method, url, headers, params, callback); + return this._call({ method, url, headers, params, callback }); + } + + async getAsync(url, params, callback) { + return this.callAsync('GET', url, params, callback); + } + + async postAsync(url, params, callback) { + return this.callAsync('POST', url, params, callback); + } + + call(method, url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. + return Promise.await(this.callAsync(method, url, params, callback)); } get(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('GET', url, params, callback); } post(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('POST', url, params, callback); } @@ -118,7 +133,7 @@ export class OAuth1Binding { return crypto.createHmac('SHA1', signingKey).update(signatureBase).digest('base64'); }; - _call(method, url, headers = {}, params = {}, callback) { + async _call({method, url, headers = {}, params = {}, callback}) { // all URLs to be functions to support parameters/customization if(typeof url === "function") { url = url(this); @@ -141,29 +156,52 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); - // Make signed request - try { - const response = HTTP.call(method, url, { - params, - headers: { - Authorization: authString + return OAuth._fetch(url, method, { + headers: { + Authorization: authString, + ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}) + }, + ...(method.toUpperCase() === 'POST' ? + { body: OAuth._addValuesToQueryParams(params).toString() } + : { queryParams: params }) + }).then((res) => + res.text().then((content) => { + const responseHeaders = Array.from(res.headers.entries()).reduce( + (acc, [key, val]) => { + return { ...acc, [key.toLowerCase()]: val }; + }, + {} + ); + const data = responseHeaders['content-type'].includes('application/json') ? + JSON.parse(content) : undefined; + return { + content: data ? '' : content, + data, + headers: { ...responseHeaders, nonce: headers.oauth_nonce }, + redirected: res.redirected, + ok: res.ok, + statusCode: res.status, + }; + }) + ) + .then((response) => { + if (callback) { + callback(undefined, response); } - }, callback && ((error, response) => { - if (! error) { - response.nonce = headers.oauth_nonce; + return response; + }) + .catch((err) => { + if (callback) { + callback(err); } - callback(error, response); - })); - // We store nonce so that JWTs can be validated - if (response) - response.nonce = headers.oauth_nonce; - return response; - } catch (err) { - throw Object.assign(new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), - {response: err.response}); - } - }; + console.log({ err }); + throw Object.assign( + new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), + { response: err.response } + ); + }); + } _encodeHeader(header) { return Object.keys(header).reduce((memo, key) => { diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index eb54458825..d0c8e3732a 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -6,7 +6,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel Object.assign( redirectUrlObj.query, - whitelistedQueryParams.reduce((prev, param) => + whitelistedQueryParams.reduce((prev, param) => params.query[param] ? { ...prev, param: params.query[param] } : prev, {} ), @@ -25,7 +25,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel }; // connect middleware -OAuth._requestHandlers['1'] = (service, query, res) => { +OAuth._requestHandlers['1'] = async (service, query, res) => { const config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); if (! config) { throw new ServiceConfiguration.ConfigError(service.serviceName); @@ -45,7 +45,7 @@ OAuth._requestHandlers['1'] = (service, query, res) => { }); // Get a request token to start auth process - oauthBinding.prepareRequestToken(callbackUrl); + await oauthBinding.prepareRequestToken(callbackUrl); // Keep track of request token so we can verify it on the next step OAuth._storeRequestToken( @@ -91,10 +91,10 @@ OAuth._requestHandlers['1'] = (service, query, res) => { // subsequent call to the `login` method will be immediate. // Get the access token for signing requests - oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); + await oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); // Run service-specific handler. - const oauthResult = service.handleOauthRequest( + const oauthResult = await service.handleOauthRequest( oauthBinding, { query: query }); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index a9f266af02..d4b283a97a 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -1,7 +1,7 @@ import http from 'http'; import { OAuth1Binding } from './oauth1_binding'; -const testPendingCredential = (test, method) => { +const testPendingCredential = async (test, method) => { const twitterfooId = Random.id(); const twitterfooName = `nickname${Random.id()}`; const twitterfooAccessToken = Random.id(); @@ -17,8 +17,8 @@ const testPendingCredential = (test, method) => { authenticate: "https://example.com/oauth/authenticate" }; - OAuth1Binding.prototype.prepareRequestToken = () => {}; - OAuth1Binding.prototype.prepareAccessToken = function() { + OAuth1Binding.prototype.prepareRequestToken = async () => {}; + OAuth1Binding.prototype.prepareAccessToken = async function() { this.accessToken = twitterfooAccessToken; this.accessTokenSecret = twitterfooAccessTokenSecret; }; @@ -27,7 +27,7 @@ const testPendingCredential = (test, method) => { try { // register a fake login service - OAuth.registerService(serviceName, 1, urls, query => ({ + OAuth.registerService(serviceName, 1, urls, async query => ({ serviceData: { id: twitterfooId, screenName: twitterfooName, @@ -71,7 +71,7 @@ const testPendingCredential = (test, method) => { respData += args[0]; return end.apply(this, arguments); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -94,17 +94,17 @@ const testPendingCredential = (test, method) => { } }; -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 550fdc2448..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.0", + version: "1.5.1", }); Package.onUse(api => { @@ -8,10 +8,7 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use([ - 'check', - 'http@1.4.4 || 2.0.0' - ], 'server'); + api.use('check', 'server'); api.use('mongo'); diff --git a/packages/oauth2/oauth2_server.js b/packages/oauth2/oauth2_server.js index cf990d8691..86eead93ba 100644 --- a/packages/oauth2/oauth2_server.js +++ b/packages/oauth2/oauth2_server.js @@ -1,5 +1,5 @@ // connect middleware -OAuth._requestHandlers['2'] = (service, query, res) => { +OAuth._requestHandlers['2'] = async (service, query, res) => { let credentialSecret; // check if user authorized access @@ -7,7 +7,7 @@ OAuth._requestHandlers['2'] = (service, query, res) => { // Prepare the login results before returning. // Run service-specific handler. - const oauthResult = service.handleOauthRequest(query); + const oauthResult = await service.handleOauthRequest(query); credentialSecret = Random.secret(); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth2/oauth2_tests.js b/packages/oauth2/oauth2_tests.js index 1ce47813b4..49b94f4eb0 100644 --- a/packages/oauth2/oauth2_tests.js +++ b/packages/oauth2/oauth2_tests.js @@ -1,6 +1,6 @@ import http from 'http'; -const testPendingCredential = function (test, method) { +const testPendingCredential = async function (test, method) { const foobookId = Random.id(); const foobookOption1 = Random.id(); const credentialToken = Random.id(); @@ -51,7 +51,7 @@ const testPendingCredential = function (test, method) { return end.apply(this, args); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -72,17 +72,17 @@ const testPendingCredential = function (test, method) { } }; -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index c5f2fd0917..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.1", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 855dc56057..ff82ae9086 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - _.each(invalidVersions, function (v) { + invalidVersions.forEach(function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - _.each(validVersions, function (v) { + validVersions.forEach(function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4c6ff0dc62..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.0" + version: "3.2.1" }); Npm.depends({ @@ -14,7 +14,6 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use('package-version-parser'); - api.use(['tinytest', 'underscore']); + api.use(['package-version-parser', 'tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); diff --git a/packages/promise/package.js b/packages/promise/package.js index 181ef21b3b..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.1", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/promise/server.js b/packages/promise/server.js index e07faeb52b..2f5f59a3c0 100644 --- a/packages/promise/server.js +++ b/packages/promise/server.js @@ -1,11 +1,13 @@ require("./extensions.js"); -require("meteor-promise").makeCompatible( - Promise, - // Allow every Promise callback to run in a Fiber drawn from a pool of - // reusable Fibers. - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + Promise, + // Allow every Promise callback to run in a Fiber drawn from a pool of + // reusable Fibers. + require("fibers") + ); +} // Reference: https://caniuse.com/#feat=promises require("meteor/modern-browsers").setMinimumBrowserVersions({ diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 97e0d8f3eb..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.2', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/standard-minifier-css/plugin/minify-css.js b/packages/standard-minifier-css/plugin/minify-css.js index 2b8c4d5e44..8ac2b0db75 100644 --- a/packages/standard-minifier-css/plugin/minify-css.js +++ b/packages/standard-minifier-css/plugin/minify-css.js @@ -60,7 +60,7 @@ class CssToolsMinifier { path: 'merged-stylesheets.css' }]; } else { - const minifiedFiles = CssTools.minifyCss(merged.code); + const minifiedFiles = await CssTools.minifyCssAsync(merged.code); result = minifiedFiles.map(minified => ({ data: minified diff --git a/packages/test-helpers/async_multi.js b/packages/test-helpers/async_multi.js index e5ec3cb43c..04be6aedfe 100644 --- a/packages/test-helpers/async_multi.js +++ b/packages/test-helpers/async_multi.js @@ -142,8 +142,13 @@ testAsyncMulti = function (name, funcs, { isOnly = false } = {}) { test.extraDetails.asyncBlock = i++; new Promise(resolve => { - resolve(func.apply(context, [test, _.bind(em.expect, em)])); - }).then(result => { + const result = func.apply(context, [test, _.bind(em.expect, em)]); + if (result && typeof result.then === "function") { + return result.then((r) => resolve(r)) + } + + return resolve(result); + }).then(() => { em.done(); }, exception => { if (em.cancel()) { @@ -191,3 +196,24 @@ pollUntil = function (expect, f, timeout, step, noFail) { step ); }; + +/** + * Helper that is used on the async tests. + * Just run the function and assert if we have an error or not. + * @param fn + * @param test + * @param shouldErrorOut + * @returns {Promise<*>} + */ +runAndThrowIfNeeded = async (fn, test, shouldErrorOut) => { + let err, result; + try { + result = await fn(); + } catch (e) { + err = e; + } + + test[shouldErrorOut ? "isTrue" : "isFalse"](err); + + return result; +}; diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 17b6e0f37a..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.0' + version: '1.3.1' }); Package.onUse(function (api) { @@ -28,7 +28,8 @@ Package.onUse(function (api) { 'SeededRandom', 'clickElement', 'blurElement', 'focusElement', 'simulateEvent', 'getStyleProperty', 'canonicalizeHtml', 'renderToDiv', 'clickIt', - 'withCallbackLogger', 'testAsyncMulti', 'simplePoll', + 'withCallbackLogger', 'testAsyncMulti', + 'simplePoll', 'runAndThrowIfNeeded', 'makeTestConnection', 'DomUtils']); api.addFiles('try_all_permutations.js'); diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..b8fb0a9ecf 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type != "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); \ No newline at end of file +}); diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index a090172f76..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1', + version: '1.3.2', documentation: null }); diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index a2d07f633f..c6509bd93d 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,12 +1,16 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); +let testNumber = 0; + async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - if (msg._text !== undefined) { - console.log(msg._text); - } + // this is a way to make sure the travis does not timeout + // if the test is running for too long without any output to the console (10 minutes) + if (msg._text !== undefined) console.log(msg._text); + else console.log(`Test number: ${ testNumber }`); + testNumber++; }); if (!process.env.URL) { @@ -19,11 +23,15 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(`Tests complete with ${failCount} failures`); - console.log(`Tests complete with ${await getPassCount(page)} passes`); + console.log(` + The number of tests from Test number may be different because + of the way the test is written. causing the test to fail or + to run more than once. in the console. Test number total: ${ testNumber }`); + console.log(`Tests complete with ${ failCount } failures`); + console.log(`Tests complete with ${ await getPassCount(page) } passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); + failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); await page.close(); await browser.close(); process.exit(1); @@ -46,7 +54,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -61,7 +69,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -76,7 +84,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -95,7 +103,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -104,11 +112,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${process.env.URL}`); + console.log(`Running test with Puppeteer at ${ process.env.URL }`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${await browser.version()}`); + console.log(`Using version: ${ await browser.version() }`); runNextUrl(browser); } diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 862749494b..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.1' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index 045548c6de..f5cd025b98 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -1,5 +1,3 @@ -const Future = Meteor.isServer && require('fibers/future'); - /******************************************************************************/ /* TestCaseResults */ /******************************************************************************/ @@ -186,6 +184,43 @@ export class TestCaseResults { this.ok(); } + _assertActual(actual, predicate, message) { + if (actual && predicate(actual)) + this.ok(); + else + this.fail({ + type: "throws", + message: (actual ? + "wrong error thrown: " + actual.message : + "did not throw an error as expected") + (message ? ": " + message : ""), + }); + } + + _guessPredicate(expected) { + let predicate; + + if (expected === undefined) { + predicate = function () { + return true; + }; + } else if (typeof expected === "string") { + predicate = function (actual) { + return typeof actual.message === "string" && + actual.message.indexOf(expected) !== -1; + }; + } else if (expected instanceof RegExp) { + predicate = function (actual) { + return expected.test(actual.message); + }; + } else if (typeof expected === 'function') { + predicate = expected; + } else { + throw new Error('expected should be a string, regexp, or predicate function'); + } + + return predicate; + } + // expected can be: // undefined: accept any exception. // string: pass if the string is a substring of the exception message. @@ -204,26 +239,8 @@ export class TestCaseResults { // particular class, use a predicate function. // throws(f, expected, message) { - var actual, predicate; - - if (expected === undefined) { - predicate = function (actual) { - return true; - }; - } else if (typeof expected === "string") { - predicate = function (actual) { - return typeof actual.message === "string" && - actual.message.indexOf(expected) !== -1; - }; - } else if (expected instanceof RegExp) { - predicate = function (actual) { - return expected.test(actual.message); - }; - } else if (typeof expected === 'function') { - predicate = expected; - } else { - throw new Error('expected should be a string, regexp, or predicate function'); - } + let actual; + const predicate = this._guessPredicate(expected); try { f(); @@ -231,15 +248,27 @@ export class TestCaseResults { actual = exception; } - if (actual && predicate(actual)) - this.ok(); - else - this.fail({ - type: "throws", - message: (actual ? - "wrong error thrown: " + actual.message : - "did not throw an error as expected") + (message ? ": " + message : ""), - }); + this._assertActual(actual, predicate, message); + } + + /** + * Same as throw, but accepts an async function as a parameter. + * @param f + * @param expected + * @param message + * @returns {Promise} + */ + async throwsAsync(f, expected, message) { + let actual; + const predicate = this._guessPredicate(expected); + + try { + await f(); + } catch (exception) { + actual = exception; + } + + this._assertActual(actual, predicate, message); } isTrue(v, msg) { @@ -309,7 +338,7 @@ export class TestCaseResults { pass = true; } } else { - /* fail -- not something that contains other things */; + /* fail -- not something that contains other things */ } if (pass === ! not) { @@ -546,37 +575,37 @@ export class TestRun { } if (Meteor.isServer) { - // On the server, ensure that only one test runs at a time, even - // with multiple clients. this.manager.testQueue.queueTask(() => { - // The future resolves when the test completes or times out. - var future = new Future(); - Meteor.setTimeout( - () => { - if (future.isResolved()) - // If the future has resolved the test has completed. - return; - test.timedOut = true; - this._report(test, { - type: "exception", - details: { - message: "test timed out" - } - }); - future['return'](); - }, - 3 * 60 * 1000 // 3 minutes - ); - this._runTest(test, () => { - // The test can complete after it has timed out (it might - // just be slow), so only resolve the future if the test - // hasn't timed out. - if (! future.isResolved()) - future['return'](); - }, stop_at_offset); - // Wait for the test to complete or time out. - future.wait(); - onComplete && onComplete(); + // On the server, ensure that only one test runs at a time, even + // with multiple clients. + let hasRan = false; + const timeoutPromise = new Promise((resolve) => { + Meteor.setTimeout(() => { + if (!hasRan) { + test.timedOut = true; + this._report(test, { + type: "exception", + details: { + message: "test timed out" + } + }); + } + + resolve(); + }, 3 * 60 * 1000); + }); + const runnerPromise = new Promise((resolve) => { + this._runTest(test, () => { + if (!hasRan) { + hasRan = true; + } + resolve(); + }, stop_at_offset); + }); + + Promise.race([runnerPromise, timeoutPromise]).finally(() => { + onComplete && onComplete(); + }); }); } else { // client diff --git a/packages/tinytest/tinytest_server.js b/packages/tinytest/tinytest_server.js index c43fb12b34..331a7007e7 100644 --- a/packages/tinytest/tinytest_server.js +++ b/packages/tinytest/tinytest_server.js @@ -9,7 +9,7 @@ import { export { Tinytest }; -const Fiber = require('fibers'); +const Fiber = Meteor._isFibersEnabled && require('fibers'); const handlesForRun = new Map; const reportsForRun = new Map; @@ -58,7 +58,7 @@ Meteor.methods({ } function onReport(report) { - if (! Fiber.current) { + if (Fiber && !Fiber.current) { Meteor._debug("Trying to report a test not in a fiber! "+ "You probably forgot to wrap a callback in bindEnvironment."); console.trace(); diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 6a8bd6793b..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/twitter-oauth/twitter_server.js b/packages/twitter-oauth/twitter_server.js index 6a973ac57d..090d455172 100644 --- a/packages/twitter-oauth/twitter_server.js +++ b/packages/twitter-oauth/twitter_server.js @@ -15,9 +15,9 @@ var urls = { // https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials Twitter.whitelistedFields = ['profile_image_url', 'profile_image_url_https', 'lang', 'email']; -OAuth.registerService('twitter', 1, urls, function(oauthBinding) { - var identity = oauthBinding.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true').data; - +OAuth.registerService('twitter', 1, urls, async function(oauthBinding) { + const response = await oauthBinding.getAsync('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true'); + const { data: identity } = response; var serviceData = { id: identity.id_str, screenName: identity.screen_name, diff --git a/packages/typescript/package.js b/packages/typescript/package.js index df071432b9..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.5.4', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 02cea0b9c6..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.1", + version: "1.3.2", }); Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); - api.use('http@1.4.4 || 2.0.0', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); diff --git a/packages/weibo-oauth/weibo_server.js b/packages/weibo-oauth/weibo_server.js index 539022aa8d..24d56438fd 100644 --- a/packages/weibo-oauth/weibo_server.js +++ b/packages/weibo-oauth/weibo_server.js @@ -1,8 +1,8 @@ Weibo = {}; -OAuth.registerService('weibo', 2, null, query => { +OAuth.registerService('weibo', 2, null, async query => { - const response = getTokenResponse(query); + const response = await getTokenResponse(query); const uid = parseInt(response.uid, 10); // different parts of weibo's api seem to expect numbers, or strings @@ -11,7 +11,7 @@ OAuth.registerService('weibo', 2, null, query => { throw new Error(`Expected 'uid' to parse to an integer: ${JSON.stringify(response)}`); } - const identity = getIdentity(response.access_token, uid); + const identity = await getIdentity(response.access_token, uid); return { serviceData: { @@ -31,46 +31,48 @@ OAuth.registerService('weibo', 2, null, query => { // - uid // - access_token // - expires_in: lifetime of this token in seconds (5 years(!) right now) -const getTokenResponse = query => { - const config = ServiceConfiguration.configurations.findOne({service: 'weibo'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'weibo', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://api.weibo.com/oauth2/access_token", {params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('weibo', config, null, {replaceLocalhost: true}), - grant_type: 'authorization_code' - }}); - } catch (err) { - throw Object.assign(new Error(`Failed to complete OAuth handshake with Weibo. ${err.message}`), - {response: err.response}); - } - - // result.headers["content-type"] is 'text/plain;charset=UTF-8', so - // the http package doesn't automatically populate result.data - response.data = JSON.parse(response.content); - - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Weibo. ${response.data.error}`); - } else { - return response.data; - } + return OAuth._fetch('https://api.weibo.com/oauth2/access_token', 'POST', { + queryParams: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('weibo', config, null, { + replaceLocalhost: true, + }), + grant_type: 'authorization_code', + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Weibo. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = (accessToken, userId) => { - try { - return HTTP.get( - "https://api.weibo.com/2/users/show.json", - {params: {access_token: accessToken, uid: userId}}).data; - } catch (err) { - throw Object.assign(new Error("Failed to fetch identity from Weibo. " + err.message), - {response: err.response}); - } +const getIdentity = async (accessToken, userId) => { + return OAuth._fetch('https://api.weibo.com/2/users/show.json', 'GET', { + queryParams: { + access_token: accessToken, + uid: userId, + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error('Failed to fetch identity from Weibo. ' + err.message), + { response: err.response } + ); + }); }; Weibo.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e475269aa6..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-rc.0", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..27a0c865e4 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.9.0", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index ce78281faa..c265734f8a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.0", + "@meteorjs/babel": "7.17.2-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 2c8f3ff4e2..6a5c4d071c 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - + Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..22ffdebaeb 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -12,6 +12,13 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; +const { + blue, + green, + purple, + red, + yellow +} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -533,12 +540,14 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, + 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, + prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -547,7 +556,13 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - + if (options.prototype) { + Console.error( + `The ${Console.command('--prototype')} option is no longer supported for packages.` + ); + Console.error(); + throw new main.ShowUsage; + } if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); @@ -790,6 +805,22 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { + + // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file + if ((/packages/).test(f)) { + + const prototypePackages = + () => + 'autopublish # Publish all data to the clients (for prototyping)\n' + + 'insecure # Allow all DB writes from clients (for prototyping)'; + + // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else + if (options.prototype) { + return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) + } else { + return Buffer.from(contents.toString().replace(/~prototype~/g, '')) + } + } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { @@ -905,7 +936,8 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue-based app"); + cmd("meteor create --vue # to create a basic Vue3-based app"); + cmd("meteor create --vue-2 # to create a basic Vue2-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); @@ -2508,6 +2540,298 @@ main.registerCommand({ }); +/////////////////////////////////////////////////////////////////////////////// +// generate +/////////////////////////////////////////////////////////////////////////////// + +/** + * + * @param question + * @returns {function(string): Promise} + */ +const createPrompt = () => { + const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); + return async (question) => new Promise((resolve, reject) => { + readline.question(question, (answer) => { + resolve(answer); + }) + }) +} + +const sanitizeBoolAnswer = (string) => { + if (string === '') return true; + + if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; + + if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; + + Console.error(red('You must provide a valid answer')); + Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); + throw new main.ExitWithCode(2); +} + +/** + * simple verification for the name + * @param scaffoldName {string} + */ +const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Model names should not be empty.')); + throw new main.ExitWithCode(2); + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain slashes.')); + throw new main.ExitWithCode(2); + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain special characters except _ and -')); + throw new main.ExitWithCode(2); + } +} + +main.registerCommand({ + name: 'generate', + maxArgs: 1, + minArgs: 0, + options: { + path: { type: String }, + methods: { type: Boolean }, + publications: { type: Boolean }, + templatePath : { type: String }, + replaceFn : { type: String }, + }, + pretty: false, + catalogRefresh: new catalog.Refresh.Never() +}, async function (options) { + const { args, appDir } = options; + + const setup = async (arg0) => { + if (arg0 === undefined) { + const ask = createPrompt(); + // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); + checkScaffoldName(scaffoldName); + const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); + const methods = sanitizeBoolAnswer(areMethods); + const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); + const publications = sanitizeBoolAnswer(arePublications); + const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); + return { + isWizard: true, + scaffoldName, + path, + methods, + publications, + } + } + + const { + path, + methods, + publications + } = options; + + return { + isWizard: false, + scaffoldName: arg0, + path, + methods, + publications, + } + } + /** + * @type{string} + */ + const { + isWizard, + scaffoldName, + path, + methods, + publications + } = await setup(args[0]); + + checkScaffoldName(scaffoldName); + // get directory where we will place our files + const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; + + /** + * + * @param appDir + * @returns {string[]} + */ + const getFilesInDir = (appDir) => { + const appPath = files.pathResolve(appDir); + return files.readdir(appPath); + } + + const getExtension = () => { + const rootFiles = getFilesInDir(appDir); + if (rootFiles.includes('tsconfig.json')) return 'ts' + else return 'js' + } + + /** + * + * @returns {string} + */ + const userTransformFilenameFn = (filename) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformFilename; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformFilename.')); + Console.error(yellow('The function should be named transformFilename and should be exported.')); + throw new main.ExitWithCode(2); + } + return replaceFn(scaffoldName, filename); + } + /** + * + * @returns {string} + */ + const userTransformContentsFn = (contents, fileName) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformContents; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformContents.')); + Console.error(yellow('The function should be named transformContents and should be exported.')); + throw new main.ExitWithCode(2); + } + return replaceFn(scaffoldName, contents, fileName); + } + + /** + * if contains - turns into pascal + * @param str{string} + * @returns {string} + */ + const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } + const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } + + /** + * + * @param name {string} + */ + const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + } + + /** + * + * @param content{string} + * @param fileName{string} + * @returns {string} + */ + const removeUnusedLines = (content, fileName) => { + if (methods && publications) return content; + if (!methods && !publications) return content; + if(!fileName.startsWith('index')) return content; + return content + .split('\n') + .filter(line => { + if (!methods && line.includes('methods')) return false; + if (!publications && line.includes('publications')) return false; + return true; + }) + .join('\n'); + } + /// Program + const rootFiles = getFilesInDir(appDir); + if (!rootFiles.includes('.meteor')) { + Console.error(red('You must be in a Meteor project to run this command')); + Console.error(yellow('You can create a new Meteor project with `meteor create`')); + throw new main.ExitWithCode(2); + } + + const extension = getExtension() + const assetsPath = () => { + if (options.templatePath){ + const templatePath = files.pathJoin(appDir, options.templatePath) + Console.info(`Using template that is in: ${purple(templatePath)}`) + return templatePath; + } + return files.pathJoin( + __dirnameConverted, + '..', + 'static-assets', + `scaffolds-${ extension }`) + } + // create directory + const isOk = files.mkdir_p(scaffoldPath); + if (!isOk) { + Console.error(red('Something went wrong when creating the folder')); + Console.error(yellow('Do you have the correct permissions?')); + throw new main.ExitWithCode(2); + } + + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { + transformFilename: function (f) { + if (options.replaceFn) return userTransformFilenameFn(f); + return transformName(f); + }, + transformContents: function (contents, fileName) { + if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); + const cleaned = removeUnusedLines(contents.toString(), fileName); + return transformName(cleaned); + } + }) + + const checkAndRemoveFiles = () => { + if (!methods) + files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); + + if (!publications) + files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); + } + + const xor = (a, b) => ( a || b ) && !( a && b ); + + if (!isWizard && xor(methods, publications)) { + checkAndRemoveFiles() + } + + if (isWizard) { + checkAndRemoveFiles() + } + + const packageJsonPath = files.pathJoin(appDir, 'package.json'); + const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonFile); + + const mainJsPath = + packageJson?.meteor?.mainModule?.server + ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) + : files.pathJoin(appDir, 'server', 'main.js'); + const mainJs = files.readFile(mainJsPath); + const mainJsLines = mainJs.toString().split('\n'); + const importLine = path + ? `import '${path}';` + : `import '/imports/api/${ scaffoldName }';` + const mainJsFile = [importLine, ...mainJsLines].join('\n'); + files.writeFile(mainJsPath, mainJsFile); + + Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); + + return 0; +}); + + /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 8091e7b025..71b63daf23 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,7 +183,8 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue-based app. + --vue Create a basic vue3-based app. + --vue-2 Create a basic vue2-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. @@ -191,6 +192,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. + --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update @@ -841,6 +843,34 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` +>>> generate + +Generate boilerplate code for a MeteorJS RPC api. +It generates a collection with the name you pass and its methods. +Is JS and TS compatible. No collection name +runs the wizard. + +Usage: meteor generate [] [options] + +By default, generates a collection.ts|js file with the name you pass, +methods(insert, update, remove, find, findOne) in a methods.js|ts file +and publications.js|ts. If you just use the command without collectionName, +it will generate run the wizard, asking you what is necessary. + +We do have as well the templatePath, wich uses the template you pass to generate +the boilerplate code. You can use the default template or create your own. +for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. + +This is a MeteorJS project command. + +Options: + --help Show help. + --path The path to the folder where the files will be generated. Default is the current folder. + --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --methods Generate methods. + --publications Generate publications. + >>> publish-release Publish a new meteor release to the package server. diff --git a/tools/console/console.js b/tools/console/console.js index 16ebd55da9..7715560354 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,4 +1320,19 @@ class Console extends ConsoleBase { } } +const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; +const red = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple = (text) => `\x1b[35m${ text }\x1b[0m`; +const green = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue = (text) => `\x1b[34m${ text }\x1b[0m`; + +const colors = { + yellow, + red, + purple, + green, + blue, +}; + +exports.colors = colors; exports.Console = new Console; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 78af222cfd..3075970647 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,6 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index db232e18af..1884abb1d6 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,6 +40,14 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. +## skel-vue - Package Skeleton + +Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. + +## skel-vue-2 - Package Skeleton + +Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. + ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js new file mode 100644 index 0000000000..a8a92d7cde --- /dev/null +++ b/tools/static-assets/scaffolds-js/collection.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js new file mode 100644 index 0000000000..59951d14bb --- /dev/null +++ b/tools/static-assets/scaffolds-js/index.js @@ -0,0 +1,3 @@ +export * from './collection'; +export * from './methods'; +export * from './publications'; diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js new file mode 100644 index 0000000000..415f0ebb0a --- /dev/null +++ b/tools/static-assets/scaffolds-js/methods.js @@ -0,0 +1,29 @@ +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import { $$PascalName$$Collection } from './collection'; + +export async function create(data) { + return $$PascalName$$Collection.insertAsync({ ...data }); +} + +export async function update(_id, data) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); +} + +export async function remove(_id) { + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); +} + +export async function findById(_id) { + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById +}); diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js new file mode 100644 index 0000000000..7e3a996634 --- /dev/null +++ b/tools/static-assets/scaffolds-js/publications.js @@ -0,0 +1,6 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts new file mode 100644 index 0000000000..f579cd71a2 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -0,0 +1,9 @@ +import { Mongo } from 'meteor/mongo'; + +export type $$PascalName$$ = { + _id?: string; + name: string; + createdAt: Date; +} + +export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts new file mode 100644 index 0000000000..59951d14bb --- /dev/null +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -0,0 +1,3 @@ +export * from './collection'; +export * from './methods'; +export * from './publications'; diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts new file mode 100644 index 0000000000..d36e1cd42c --- /dev/null +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -0,0 +1,30 @@ +import { Meteor } from 'meteor/meteor'; +import { Mongo } from 'meteor/mongo'; +import { check } from 'meteor/check'; +import { $$PascalName$$, $$PascalName$$Collection } from './collection'; + +export async function create(data: $$PascalName$$) { + return $$PascalName$$Collection.insertAsync({ ...data }); +} + +export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); +} + +export async function remove(_id: string) { + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); +} + +export async function findById(_id: string) { + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById +}); diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts new file mode 100644 index 0000000000..818932bba3 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -0,0 +1,6 @@ +import { Meteor, Subscription } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index caa775ee6f..0addfea192 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page - +~prototype~ static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 62bedd2c00..294120e852 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library - +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index c2506a81ed..5e929125ff 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,8 +19,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 8f6a2ce1df..42dd3fa370 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,6 +11,7 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index 60ed1976b3..d0998cd7ad 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,3 +15,4 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server +~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index d6c05d244b..492b563f76 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 0e3c38c047..6880ea240a 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,8 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index c7c54d5cc4..76457880f7 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.3" + "typescript": "^4.6.4" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-vue-2/.gitignore b/tools/static-assets/skel-vue-2/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-vue-2/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/static-assets/skel-vue-2/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/static-assets/skel-vue-2/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages new file mode 100644 index 0000000000..83be6b3a62 --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/packages @@ -0,0 +1,24 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command + +tracker # Dependency tracker to allow reactive callbacks +static-html # Define static page content in .html files +akryum:vue-component # Vue-CLI template to publish components + +meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha +johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue-2/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-vue-2/client/main.html b/tools/static-assets/skel-vue-2/client/main.html new file mode 100644 index 0000000000..99c3dfb74c --- /dev/null +++ b/tools/static-assets/skel-vue-2/client/main.html @@ -0,0 +1,7 @@ + + ~name~ + + + +
+ diff --git a/tools/static-assets/skel-vue-2/client/main.js b/tools/static-assets/skel-vue-2/client/main.js new file mode 100644 index 0000000000..665c6aa1b1 --- /dev/null +++ b/tools/static-assets/skel-vue-2/client/main.js @@ -0,0 +1,12 @@ +import Vue from 'vue' + +import '../imports/ui/plugins' + +import App from '../imports/ui/App.vue' + +Meteor.startup(() => { + new Vue({ + el: '#app', + ...App, + }) +}) diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/fixtures.js b/tools/static-assets/skel-vue-2/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/fixtures.js rename to tools/static-assets/skel-vue-2/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/index.js b/tools/static-assets/skel-vue-2/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/index.js rename to tools/static-assets/skel-vue-2/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/index.js b/tools/static-assets/skel-vue-2/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/index.js rename to tools/static-assets/skel-vue-2/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue new file mode 100644 index 0000000000..e126098ccb --- /dev/null +++ b/tools/static-assets/skel-vue-2/imports/ui/App.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Info.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/plugins.js b/tools/static-assets/skel-vue-2/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/plugins.js rename to tools/static-assets/skel-vue-2/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue-2/package.json b/tools/static-assets/skel-vue-2/package.json new file mode 100644 index 0000000000..e8cfe3ee72 --- /dev/null +++ b/tools/static-assets/skel-vue-2/package.json @@ -0,0 +1,23 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.17.9", + "meteor-node-stubs": "^1.2.1", + "vue": "^2.6.14", + "vue-meteor-tracker": "^2.0.0-beta.5" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/static-assets/skel-vue-2/server/main.js b/tools/static-assets/skel-vue-2/server/main.js new file mode 100644 index 0000000000..42950618b6 --- /dev/null +++ b/tools/static-assets/skel-vue-2/server/main.js @@ -0,0 +1,3 @@ +import '../imports/api/fixtures' +import '../imports/api/methods' +import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue-2/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js new file mode 100644 index 0000000000..6d2a32e09d --- /dev/null +++ b/tools/static-assets/skel-vue-2/tests/main.js @@ -0,0 +1,20 @@ +import assert from "assert"; + +describe("skel", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "skel"); + }); + + if (Meteor.isClient) { + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id new file mode 100644 index 0000000000..dd363b2513 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 83be6b3a62..2565a5fe32 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -4,21 +4,18 @@ # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base # Packages every Meteor app needs to have -mobile-experience # Packages for a great mobile UX -mongo # The database Meteor supports right now -reactive-var # Reactive variable for tracker +meteor-base@1.5.1 # Packages every Meteor app needs to have +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.16.0 # The database Meteor supports right now +reactive-var@1.0.11 # Reactive variable for tracker -standard-minifier-css # CSS minifier run for production mode -standard-minifier-js # JS minifier run for production mode -es5-shim # ECMAScript 5 compatibility for older browsers -ecmascript # Enable ECMAScript2015+ syntax in app code -typescript # Enable TypeScript syntax in .ts and .tsx modules -shell-server # Server-side component of the `meteor shell` command +standard-minifier-css@1.8.2 # CSS minifier run for production mode +standard-minifier-js@2.8.1 # JS minifier run for production mode +es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers +ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code +typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules +shell-server@0.5.0 # Server-side component of the `meteor shell` command +hot-module-replacement@0.5.1 # Update client in development without reloading the page -tracker # Dependency tracker to allow reactive callbacks -static-html # Define static page content in .html files -akryum:vue-component # Vue-CLI template to publish components - -meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha -johanbrook:publication-collector # Test a Meteor publication by collecting its output +static-html@1.3.2 # Define static page content in .html files +vite:bundler diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release new file mode 100644 index 0000000000..1d2a6d0f79 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/release @@ -0,0 +1 @@ +METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions new file mode 100644 index 0000000000..3b89f7359b --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/versions @@ -0,0 +1,71 @@ +allow-deny@1.1.1 +autoupdate@1.8.0 +babel-compiler@7.9.2 +babel-runtime@1.5.1 +base64@1.0.12 +binary-heap@1.0.11 +blaze-tools@1.1.3 +boilerplate-generator@1.7.1 +caching-compiler@1.2.2 +caching-html-compiler@1.2.1 +callback-hook@1.4.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.6.0 +ddp-common@1.4.0 +ddp-server@2.6.0 +diff-sequence@1.1.1 +dynamic-import@0.7.2 +ecmascript@0.16.2 +ecmascript-runtime@0.8.0 +ecmascript-runtime-client@0.12.1 +ecmascript-runtime-server@0.11.0 +ejson@1.1.2 +es5-shim@4.8.0 +fetch@0.1.1 +geojson-utils@1.0.10 +hot-code-push@1.0.4 +hot-module-replacement@0.5.1 +html-tools@1.1.3 +htmljs@1.1.1 +id-map@1.1.1 +inter-process-messaging@0.1.1 +launch-screen@1.3.0 +logging@1.3.1 +meteor@1.10.1 +meteor-base@1.5.1 +minifier-css@1.6.1 +minifier-js@2.7.5 +minimongo@1.9.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.8 +modules@0.19.0 +modules-runtime@0.13.0 +modules-runtime-hot@0.14.0 +mongo@1.16.0 +mongo-decimal@0.1.3 +mongo-dev-server@1.1.0 +mongo-id@1.0.8 +npm-mongo@4.9.0 +ordered-dict@1.1.0 +promise@0.12.0 +random@1.2.0 +react-fast-refresh@0.2.3 +reactive-var@1.0.11 +reload@1.3.1 +retry@1.1.0 +routepolicy@1.1.1 +shell-server@0.5.0 +socket-stream-client@0.5.0 +spacebars-compiler@1.3.1 +standard-minifier-css@1.8.2 +standard-minifier-js@2.8.1 +static-html@1.3.2 +templating-tools@1.2.2 +tracker@1.2.0 +typescript@4.5.4 +underscore@1.0.10 +vite:bundler@0.1.9 +webapp@1.13.1 +webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md new file mode 100644 index 0000000000..7ba6226cb0 --- /dev/null +++ b/tools/static-assets/skel-vue/README.md @@ -0,0 +1,19 @@ +# Meteor + Vue3 + Vite + +This is a simple example of how to use Vue3 with Meteor. + +## How to use + +1. Clone this repo +2. Run `meteor npm install` +3. Run `meteor` +4. Open `http://localhost:3000` in your browser + +## Libraries used + +- [Vue3](https://v3.vuejs.org/) +- [Vite](https://vitejs.dev/) +- [Vue Router](https://next.router.vuejs.org/) +- [Meteor](https://www.meteor.com/) +- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) +- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html index 99c3dfb74c..9e2393399c 100644 --- a/tools/static-assets/skel-vue/client/main.html +++ b/tools/static-assets/skel-vue/client/main.html @@ -1,7 +1,16 @@ ~name~ + + + + + +
diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js index 665c6aa1b1..97d382a9bd 100644 --- a/tools/static-assets/skel-vue/client/main.js +++ b/tools/static-assets/skel-vue/client/main.js @@ -1,12 +1 @@ -import Vue from 'vue' - -import '../imports/ui/plugins' - -import App from '../imports/ui/App.vue' - -Meteor.startup(() => { - new Vue({ - el: '#app', - ...App, - }) -}) +// main entry point is in imports/ui/main.jsx diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js new file mode 100644 index 0000000000..4e98fcca62 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/links.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor' +import { Mongo } from 'meteor/mongo' + +export const LinksCollection = new Mongo.Collection('links') + +if (Meteor.isServer) { + Meteor.publish('links', function () { + return LinksCollection.find({}) + }) +} diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue new file mode 100644 index 0000000000..d1ba384f1b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/About.vue @@ -0,0 +1,5 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue index e126098ccb..7a775391cb 100644 --- a/tools/static-assets/skel-vue/imports/ui/App.vue +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -1,26 +1,10 @@ - - - - + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue new file mode 100644 index 0000000000..5b1997efec --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue @@ -0,0 +1,6 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue new file mode 100644 index 0000000000..ebe691f4d2 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Hello.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue new file mode 100644 index 0000000000..0473845661 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Home.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue new file mode 100644 index 0000000000..5a17339c53 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Info.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js new file mode 100644 index 0000000000..e3500841ea --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/main.js @@ -0,0 +1,13 @@ +import { Meteor } from 'meteor/meteor' +import { createApp } from 'vue' +import { VueMeteor } from 'vue-meteor-tracker' + +import App from './App.vue' +import { router } from './router' + +Meteor.startup(() => { + const app = createApp(App) + app.use(router) + app.use(VueMeteor) + app.mount('#app') +}) diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js new file mode 100644 index 0000000000..7768ef4894 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/router.js @@ -0,0 +1,18 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Home from './Home.vue' + +export const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'home', + component: Home, + }, + { + path: '/about', + name: 'about', + component: () => import('./About.vue'), + }, + ], +}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index e8cfe3ee72..f8dc1cace8 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -3,6 +3,7 @@ "private": true, "scripts": { "start": "meteor run", + "build": "meteor build ../output/vue --directory", "test": "meteor test --once --driver-package meteortesting:mocha", "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", "visualize": "meteor --production --extra-packages bundle-visualizer" @@ -10,8 +11,9 @@ "dependencies": { "@babel/runtime": "^7.17.9", "meteor-node-stubs": "^1.2.1", - "vue": "^2.6.14", - "vue-meteor-tracker": "^2.0.0-beta.5" + "vue": "^3.2.45", + "vue-meteor-tracker": "^3.0.0-beta.7", + "vue-router": "^4.1.6" }, "meteor": { "mainModule": { @@ -19,5 +21,13 @@ "server": "server/main.js" }, "testModule": "tests/main.js" + }, + "devDependencies": { + "@types/meteor": "^2.8.1", + "@vitejs/plugin-vue": "^3.2.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.19", + "tailwindcss": "^3.2.4", + "vite": "^3.2.3" } } diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js new file mode 100644 index 0000000000..33ad091d26 --- /dev/null +++ b/tools/static-assets/skel-vue/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js index 42950618b6..44f7bc045b 100644 --- a/tools/static-assets/skel-vue/server/main.js +++ b/tools/static-assets/skel-vue/server/main.js @@ -1,3 +1,31 @@ -import '../imports/api/fixtures' -import '../imports/api/methods' -import '../imports/api/publications' +import { Meteor } from 'meteor/meteor' +import { LinksCollection } from '/imports/api/links' + +async function insertLink({ title, url }) { + await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) +} + +Meteor.startup(async () => { + // If the Links collection is empty, add some data. + if ((await LinksCollection.find().countAsync()) === 0) { + await insertLink({ + title: 'Do the Tutorial', + url: 'https://www.solidjs.com/tutorial/introduction_basics', + }) + + await insertLink({ + title: 'Follow the Guide', + url: 'https://guide.meteor.com', + }) + + await insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com', + }) + + await insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com', + }) + } +}) diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js new file mode 100644 index 0000000000..72c950fc84 --- /dev/null +++ b/tools/static-assets/skel-vue/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js index 6d2a32e09d..086819d896 100644 --- a/tools/static-assets/skel-vue/tests/main.js +++ b/tools/static-assets/skel-vue/tests/main.js @@ -1,20 +1,20 @@ -import assert from "assert"; +import assert from 'assert' -describe("skel", function () { - it("package.json has correct name", async function () { - const { name } = await import("../package.json"); - assert.strictEqual(name, "skel"); - }); +describe('vue-skeleton', function () { + it('package.json has correct name', async function () { + const { name } = await import('../package.json') + assert.strictEqual(name, 'vue-skeleton') + }) if (Meteor.isClient) { - it("client is not server", function () { - assert.strictEqual(Meteor.isServer, false); - }); + it('client is not server', function () { + assert.strictEqual(Meteor.isServer, false) + }) } if (Meteor.isServer) { - it("server is not client", function () { - assert.strictEqual(Meteor.isClient, false); - }); + it('server is not client', function () { + assert.strictEqual(Meteor.isClient, false) + }) } -}); +}) diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js new file mode 100644 index 0000000000..d3aeaa9aba --- /dev/null +++ b/tools/static-assets/skel-vue/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + meteor: { + clientEntry: 'imports/ui/main.js', + }, + optimizeDeps: { + exclude: ['vue-meteor-tracker'], + }, +}) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 234b36f9bc..88e1ef394b 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,6 +29,7 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**" + "./static-assets/skel*/**", + "./static-assets/scaffolds*/**", ] } From 10784fc7ba983c0a780b6a6e1edf09229be6f317 Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Mon, 12 Dec 2022 20:45:31 +0100 Subject: [PATCH 230/293] update packages --- docs/source/commandline.md | 17 ++++++++--------- .../static-assets/skel-svelte/.meteor/packages | 1 - 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ebb9381d3a..78f7eacf49 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -164,38 +164,37 @@ Create a basic [Solid](https://www.solidjs.com/) app. | | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | |------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | | X | X | X | | | [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | | [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | | [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | | [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | | [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | X | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | | X | X | X | X | | [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | | [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | | [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | | [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | | [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | | [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | | [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | | [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | | X | X | X | X | | [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | | [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | | [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | | [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | | [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | | [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | | [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | | [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | | [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | | [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | +| [zodern:melte](https://atmospherejs.com/zodern/melte) | | | | | | | | X | | | | |

meteor generate

diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 283d99b9b2..110aaf8f8c 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -7,7 +7,6 @@ meteor-base # Packages every Meteor app needs to have mobile-experience # Packages for a great mobile UX mongo # The database Meteor supports right now -reactive-var # Reactive variable for tracker standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode From bb9e5a9815d1c5cd68b2727c01d94c30fede1a9c Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Mon, 12 Dec 2022 20:45:40 +0100 Subject: [PATCH 231/293] utilize pub/sub --- .../skel-svelte/imports/ui/App.svelte | 14 ++++++-------- tools/static-assets/skel-svelte/server/main.js | 4 ++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte index 31a4ae46de..101098e37b 100644 --- a/tools/static-assets/skel-svelte/imports/ui/App.svelte +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -6,15 +6,13 @@ counter += 1; } - const subIsReady = true; // remove this line if you want to use the code below - // no need to publish/subscribe as there is autopublish package installed - // let subIsReady = false; - // $m: { - // const handle = Meteor.subscribe('links.all'); // todo: setup the server-side publication - // subIsReady = handle.ready(); - // } + let subIsReady = false; + $m: { + const handle = Meteor.subscribe('links.all'); + subIsReady = handle.ready(); + } - // $m is available from zodern:melte package + // more information about $m at https://atmospherejs.com/zodern/melte#tracker-statements $m: links = LinksCollection.find().fetch(); diff --git a/tools/static-assets/skel-svelte/server/main.js b/tools/static-assets/skel-svelte/server/main.js index b43489013b..ef8955bc7c 100644 --- a/tools/static-assets/skel-svelte/server/main.js +++ b/tools/static-assets/skel-svelte/server/main.js @@ -5,6 +5,10 @@ async function insertLink({ title, url }) { await LinksCollection.insertAsync({ title, url, createdAt: new Date() }); } +Meteor.publish('links.all', function () { + return LinksCollection.find(); +}) + Meteor.startup(async () => { // If the Links collection is empty, add some data. if (await LinksCollection.find().countAsync() === 0) { From 2e8d66f5386e58281d0244ee4d0e7fd8cb667367 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 15:37:55 -0400 Subject: [PATCH 232/293] new meteor-babel version --- npm-packages/meteor-babel/options.js | 14 +++++++------- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index dc215572b8..93bb21b905 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,13 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - if (!process.env.DISABLE_FIBERS) { - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); - } + + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: !process.env.DISABLE_FIBERS, + isFiberDisabled: process.env.DISABLE_FIBERS, + }]); // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 6733ac41b8..43b6909636 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.2-beta.0", + "version": "7.18.0-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c1745ba2f9..c0872399eb 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (! node.async) { + if (!node.async || this.opts.isFiberDisabled) { return; } From 59792cdc77293f24f9a424950792f67b694edcec Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:02:18 -0300 Subject: [PATCH 233/293] chore: update dev-bundle tools --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c265734f8a..1b5d8b5244 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.2-beta.0", + "@meteorjs/babel": "7.18.0-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 89f11a117f93c4920346d1a3c4b813b1ecdaa755 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:03:02 -0300 Subject: [PATCH 234/293] Meteor bundle version to 14.21.1.3 :commet: --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index e1379039a5..f4be9ae253 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.2 +BUNDLE_VERSION=14.21.1.3 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 061c7b4411a9dccbb45da3022118fbf226fe7f15 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 16:53:30 -0400 Subject: [PATCH 235/293] new meteor-babel version --- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 43b6909636..f3b5642e8a 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.0", + "version": "7.18.0-beta.1", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c0872399eb..2d1de3e9e1 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || this.opts.isFiberDisabled) { + if (!node.async || !this.opts.isFiberDisabled) { return; } diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 1b5d8b5244..9fb98228b9 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.0", + "@meteorjs/babel": "7.18.0-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 8135c82bd6aaa6cfde77cee560a48fd4696c53d6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:55:12 -0300 Subject: [PATCH 236/293] chore: updated bundle version --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index f4be9ae253..be2307e734 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.3 +BUNDLE_VERSION=14.21.1.4 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From cf0b2bb6286debb48cf7b9b94a544d50a941c041 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:02:14 -0300 Subject: [PATCH 237/293] docs: adjusted missing ponctuation in docs --- docs/history.md | 79 ++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/docs/history.md b/docs/history.md index 346edbfca1..7386b9d1e3 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,42 +1,53 @@ -## 2.9, 2022-XX-XX +## v2.9, 2022-12-12 ### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) -* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) -* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) -* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) -* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) -* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) -* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) -* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) -* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) -* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) -* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) -* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) -* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* Create Email.sendAsync method without using Fibers [PR](https://github.com/meteor/meteor/pull/12101) + by [edimarlnx](https://github.com/edimarlnx). +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) + by [edimarlnx](https://github.com/edimarlnx). +* Change Accounts and Oauth to use Async methods [PR](https://github.com/meteor/meteor/pull/12156) + by [edimarlnx](https://github.com/edimarlnx). +* TinyTest package without Future [PR](https://github.com/meteor/meteor/pull/12222) + by [matheusccastroo](https://github.com/matheusccastroo). +* Feat user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) + by [Grubba27](https://github.com/Grubba27). +* Move some OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) + by [StorytellerCZ](https://github.com/StorytellerCZ). +* Feat: not using insecure & autopublish [PR](https://github.com/meteor/meteor/pull/12220) + by [Grubba27](https://github.com/Grubba27). +* Don't apply babel async-await plugin when not running on Fibers [PR](https://github.com/meteor/meteor/pull/12221). + by [matheusccastroo](https://github.com/matheusccastroo). +* Implemented Fibers-less MongoDB count methods [PR](https://github.com/meteor/meteor/pull/12295) + by [radekmie](https://github.com/radekmie). +* (feat): Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) + by [Grubba27](https://github.com/Grubba27). +* Update types [PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech). +* [package-version-parser] Remove underscore [PR](https://github.com/meteor/meteor/pull/12248) + by [harryadel](https://github.com/harryadel). +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) + by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` - +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth`. #### Migration Steps #### Meteor Version Release * `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel + - updated Typescript deps and meteor babel. * `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel + - updated Typescript deps and meteor babel. * `accounts-base@2.2.6` - Moved some functions to accounts-oauth. * `accounts-oauth@1.4.2` - Received functions from accounts-base. * `accounts-password@2.3.2` - - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync`. * `babel-compiler@7.10.1` - Updated babel to 7.17.1. * `email@2.2.3` @@ -78,7 +89,7 @@ * `test-in-browser@1.3.2` - Adjusted e[type] to e.type * `tinytest@1.2.2` - - TinyTest package without Future + - TinyTest package without Future. * `twitter-oauth@1.3.2` - Asyncfied methods. * `typescript@4.6.4` @@ -87,14 +98,14 @@ - Asyncfied methods. #### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@edimarlnx](https://github.com/edimarlnx) -- [@matheusccastroo](https://github.com/matheusccastroo) -- [@Grubba27](https://github.com/Grubba27) -- [@StorytellerCZ](https://github.com/StorytellerCZ) -- [@radekmie](https://github.com/radekmie) -- [@piotrpospiech](https://github.com/piotrpospiech) -- [@harryadel](https://github.com/harryadel) +- [@henriquealbert](https://github.com/henriquealbert); +- [@edimarlnx](https://github.com/edimarlnx); +- [@matheusccastroo](https://github.com/matheusccastroo); +- [@Grubba27](https://github.com/Grubba27); +- [@StorytellerCZ](https://github.com/StorytellerCZ); +- [@radekmie](https://github.com/radekmie); +- [@piotrpospiech](https://github.com/piotrpospiech); +- [@harryadel](https://github.com/harryadel); For making this great framework even better! @@ -106,7 +117,7 @@ For making this great framework even better! - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327). - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0. #### Breaking Changes N/A @@ -118,14 +129,14 @@ N/A - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). #### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@znewsham](https://github.com/znewsham) +- [@henriquealbert](https://github.com/henriquealbert); +- [@znewsham](https://github.com/znewsham); For making this great framework even better! -## 2.8.1, 2022-11-14 +## v2.8.1, 2022-11-14 #### Highlights From 9982d2c74f8a4cb266f32d890d74e2fe409a8923 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:04:41 -0300 Subject: [PATCH 238/293] docs: updated migration steps --- docs/history.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 7386b9d1e3..e5922dba2b 100644 --- a/docs/history.md +++ b/docs/history.md @@ -2,7 +2,7 @@ ### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) by [@StorytellerCZ](https://github.com/StorytellerCZ). * Create Email.sendAsync method without using Fibers [PR](https://github.com/meteor/meteor/pull/12101) by [edimarlnx](https://github.com/edimarlnx). * Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) @@ -36,6 +36,8 @@ #### Migration Steps +You can follow in [here](https://guide.meteor.com/2.9-migration.html). + #### Meteor Version Release * `eslint-plugin-meteor@7.4.0`: From 3eb377057b251448957081e77d21600e619aecfc Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:08:54 -0300 Subject: [PATCH 239/293] Docs: updated pr titles to more semantics --- docs/history.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/history.md b/docs/history.md index e5922dba2b..cf797a4e59 100644 --- a/docs/history.md +++ b/docs/history.md @@ -11,9 +11,9 @@ by [edimarlnx](https://github.com/edimarlnx). * TinyTest package without Future [PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo). -* Feat user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) +* Feat: user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27). -* Move some OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) +* Move somed methods from OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ). * Feat: not using insecure & autopublish [PR](https://github.com/meteor/meteor/pull/12220) by [Grubba27](https://github.com/Grubba27). @@ -21,13 +21,13 @@ by [matheusccastroo](https://github.com/matheusccastroo). * Implemented Fibers-less MongoDB count methods [PR](https://github.com/meteor/meteor/pull/12295) by [radekmie](https://github.com/radekmie). -* (feat): Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) +* Feat: Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27). * Update types [PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech). -* [package-version-parser] Remove underscore [PR](https://github.com/meteor/meteor/pull/12248) +* Remove underscore from package-version-parser [PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel). -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) +* Update MongoDB driver version [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). +* New Vue3 Skeleton [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes From 2baa715de6c8979f8a141e88c8377dea4ba6a1f2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 11:06:29 -0300 Subject: [PATCH 240/293] chore: reverted missing types --- packages/meteor/package.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7007d77957..839475f713 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -55,6 +55,8 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); + + api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { From d740b6831e87ae5d7c15448cb45d48e60b1c1de3 Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Tue, 13 Dec 2022 17:58:25 +0100 Subject: [PATCH 241/293] add TS support --- .../skel-svelte/.meteor/packages | 1 + .../skel-svelte/imports/ui/App.svelte | 3 +++ tools/static-assets/skel-svelte/package.json | 9 ++++++--- .../static-assets/skel-svelte/server/main.js | 2 +- tools/static-assets/skel-svelte/tsconfig.json | 20 +++++++++++++++++++ 5 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 tools/static-assets/skel-svelte/tsconfig.json diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 110aaf8f8c..b6c7d8a95d 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -19,3 +19,4 @@ shell-server # Server-side component of the `meteor shell` command static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension hot-module-replacement # Update client in development without reloading the page +zodern:types # Enable types from meteor/atmosphere packages diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte index 101098e37b..2456b485bd 100644 --- a/tools/static-assets/skel-svelte/imports/ui/App.svelte +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -33,4 +33,7 @@ {:else}
Loading ...
{/if} + +

Typescript ready

+

Just add lang="ts" to .svelte components.

diff --git a/tools/static-assets/skel-svelte/package.json b/tools/static-assets/skel-svelte/package.json index 0b0aae237d..0ae79b3327 100644 --- a/tools/static-assets/skel-svelte/package.json +++ b/tools/static-assets/skel-svelte/package.json @@ -8,9 +8,12 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.17.9", - "meteor-node-stubs": "^1.2.1", - "svelte": "^3.46.4" + "@babel/runtime": "^7.20.6", + "meteor-node-stubs": "^1.2.5", + "svelte": "^3.54.0" + }, + "devDependencies": { + "svelte-preprocess": "^5.0.0" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-svelte/server/main.js b/tools/static-assets/skel-svelte/server/main.js index ef8955bc7c..886520b487 100644 --- a/tools/static-assets/skel-svelte/server/main.js +++ b/tools/static-assets/skel-svelte/server/main.js @@ -5,7 +5,7 @@ async function insertLink({ title, url }) { await LinksCollection.insertAsync({ title, url, createdAt: new Date() }); } -Meteor.publish('links.all', function () { +Meteor.publish('links.all', function publishLinksAll() { return LinksCollection.find(); }) diff --git a/tools/static-assets/skel-svelte/tsconfig.json b/tools/static-assets/skel-svelte/tsconfig.json new file mode 100644 index 0000000000..11f2c45698 --- /dev/null +++ b/tools/static-assets/skel-svelte/tsconfig.json @@ -0,0 +1,20 @@ +{ + // see https://guide.meteor.com/build-tool.html#typescript for a config example + "compilerOptions": { + "allowSyntheticDefaultImports": true, // to be able to import eg meteor/mongo + "baseUrl": ".", // required by "paths" + "module": "esNext", // required by "preserveValueImports" + "moduleResolution": "node", // required by zodern:types (not documented) + "paths": { + "/*": ["*"], // support absolute /imports/* with a leading '/' + // support Meteor/Atmospehere packages, required by zodern:types + "meteor/*": [ + "node_modules/@types/meteor/*", + ".meteor/local/types/packages.d.ts" + ] + }, + "preserveSymlinks": true, // required by zodern:types + "preserveValueImports": true // otherwise TS will remove imported components + }, + "exclude": ["./.meteor/**", "./packages/**"] // this may solve VS Code Svelte plugin warnings +} From 524360bb407a3ccf6cdd8e52d990534569deba0b Mon Sep 17 00:00:00 2001 From: Tom Soukup Date: Tue, 13 Dec 2022 18:06:35 +0100 Subject: [PATCH 242/293] convert to TS --- docs/source/commandline.md | 1 + .../skel-svelte/imports/api/links.js | 3 --- .../skel-svelte/imports/api/links.ts | 9 +++++++++ .../skel-svelte/imports/ui/App.svelte | 17 ++++++++--------- 4 files changed, 18 insertions(+), 12 deletions(-) delete mode 100644 tools/static-assets/skel-svelte/imports/api/links.js create mode 100644 tools/static-assets/skel-svelte/imports/api/links.ts diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 78f7eacf49..9891dbadda 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -195,6 +195,7 @@ Create a basic [Solid](https://www.solidjs.com/) app. | [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | | [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | | [zodern:melte](https://atmospherejs.com/zodern/melte) | | | | | | | | X | | | | | +| [zodern:types](https://atmospherejs.com/zodern/types) | | | | | | | | X | | | | |

meteor generate

diff --git a/tools/static-assets/skel-svelte/imports/api/links.js b/tools/static-assets/skel-svelte/imports/api/links.js deleted file mode 100644 index 050c508eae..0000000000 --- a/tools/static-assets/skel-svelte/imports/api/links.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-svelte/imports/api/links.ts b/tools/static-assets/skel-svelte/imports/api/links.ts new file mode 100644 index 0000000000..291d640b9b --- /dev/null +++ b/tools/static-assets/skel-svelte/imports/api/links.ts @@ -0,0 +1,9 @@ +import { Mongo } from 'meteor/mongo'; + +export interface Link { + _id: string; + url: string; + title: string; +} + +export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte index 2456b485bd..147a9e2f97 100644 --- a/tools/static-assets/skel-svelte/imports/ui/App.svelte +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -1,18 +1,20 @@ - @@ -33,7 +35,4 @@ {:else}
Loading ...
{/if} - -

Typescript ready

-

Just add lang="ts" to .svelte components.

From 8379f4ac14173b9e37ec7966cb8a690822f8c760 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 14:43:19 -0300 Subject: [PATCH 243/293] chore: updated node version --- scripts/build-dev-bundle-common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index ef6013c4e5..6928825c20 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,7 +5,7 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=14.21.1 +NODE_VERSION=14.21.2 MONGO_VERSION_64BIT=5.0.5 MONGO_VERSION_32BIT=3.2.22 NPM_VERSION=6.14.17 From f279e55bb2b6bab2a531c9adb268299202de90f5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 14:43:29 -0300 Subject: [PATCH 244/293] bump to node 14.21.2 --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index be2307e734..70956fb22d 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.4 +BUNDLE_VERSION=14.21.2.0 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 6c8db261472690692be7d32517866cae4183bfb4 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 15:39:33 -0300 Subject: [PATCH 245/293] revert 524360bb40 --- .../skel-svelte/imports/api/links.js | 3 +++ .../skel-svelte/imports/api/links.ts | 9 --------- .../skel-svelte/imports/ui/App.svelte | 18 ++++++++++-------- 3 files changed, 13 insertions(+), 17 deletions(-) create mode 100644 tools/static-assets/skel-svelte/imports/api/links.js delete mode 100644 tools/static-assets/skel-svelte/imports/api/links.ts diff --git a/tools/static-assets/skel-svelte/imports/api/links.js b/tools/static-assets/skel-svelte/imports/api/links.js new file mode 100644 index 0000000000..050c508eae --- /dev/null +++ b/tools/static-assets/skel-svelte/imports/api/links.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-svelte/imports/api/links.ts b/tools/static-assets/skel-svelte/imports/api/links.ts deleted file mode 100644 index 291d640b9b..0000000000 --- a/tools/static-assets/skel-svelte/imports/api/links.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export interface Link { - _id: string; - url: string; - title: string; -} - -export const LinksCollection = new Mongo.Collection('links'); diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte index 147a9e2f97..d64c1297ee 100644 --- a/tools/static-assets/skel-svelte/imports/ui/App.svelte +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -1,20 +1,20 @@ - @@ -33,6 +33,8 @@ {/each} {:else} -
Loading ...
+
Loading ...
{/if} +

Typescript ready

+

Just add lang="ts" to .svelte components.

From cde0d0998ec31c0492321188e2ac356242162625 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 15:49:22 -0300 Subject: [PATCH 246/293] =?UTF-8?q?Meteor=20version=20to=202.9.1-beta.0?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fetch/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/fetch/package.js b/packages/fetch/package.js index 5648235dac..79eec048f2 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.2', + version: '0.1.3-beta.0', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 839475f713..7022a02698 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3' + version: '1.10.4-beta.0' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index acce35a806..c826e4b54d 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.9.1.beta.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 104ae8c6ee0e6d7327d205e6a1a0e8390a9b2716 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 16:58:20 -0300 Subject: [PATCH 247/293] chore: updated _config.yml --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_config.yml b/docs/_config.yml index 7a70499147..1bd31f0460 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,6 +1,7 @@ title: Meteor API Docs subtitle: API Docs versions: + - '2.9' - '2.8' - '2.7' - '2.6' From 782b3d12a3dc81924d118eb5c44f1a0a7c484449 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Tue, 13 Dec 2022 17:02:02 -0300 Subject: [PATCH 248/293] Update _config.yml --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_config.yml b/docs/_config.yml index 7a70499147..1bd31f0460 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,6 +1,7 @@ title: Meteor API Docs subtitle: API Docs versions: + - '2.9' - '2.8' - '2.7' - '2.6' From 89fbfa5bf139e06d7cde97a590f3bbcb89702de5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 17:16:00 -0300 Subject: [PATCH 249/293] Meteor version to 2.9.1-beta.0 :comet: --- packages/meteor-tool/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bafb59a62e..ee4b6a75b8 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0', + version: '2.9.1-beta.0', }); Package.includeTool(); From 647b9646bfc8584a8d497e7461c0efe92f82236e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 17:58:50 -0300 Subject: [PATCH 250/293] docs: updated breaking changes for more clarity --- docs/history.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index cf797a4e59..cf90d38dde 100644 --- a/docs/history.md +++ b/docs/history.md @@ -32,7 +32,8 @@ #### Breaking Changes -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth`. +* OAuth related code has been moved from `accounts-base` to `accounts-oauth`, removing the dependency on `service-configuration` +more can be seen in this [discussion](https://github.com/meteor/meteor/discussions/12171) and in the [PR](https://github.com/meteor/meteor/pull/12202). #### Migration Steps From 73bc53a52ca1507b8d4be15b8585743f7539a5fb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 09:29:24 -0300 Subject: [PATCH 251/293] docs: update on history.md(breaking changes) --- docs/history.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/history.md b/docs/history.md index cf90d38dde..2c41408d65 100644 --- a/docs/history.md +++ b/docs/history.md @@ -31,9 +31,18 @@ by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes + N/A -* OAuth related code has been moved from `accounts-base` to `accounts-oauth`, removing the dependency on `service-configuration` -more can be seen in this [discussion](https://github.com/meteor/meteor/discussions/12171) and in the [PR](https://github.com/meteor/meteor/pull/12202). +#### Internal API changes +* Internal methods from `OAuth` that are now async: + - _attemptLogin + - _loginMethod + - _runLoginHandlers + - OAuth.registerService now accepts async functions + +OAuth related code has been moved from `accounts-base` to `accounts-oauth`, removing the dependency on `service-configuration` +more can be seen in this [discussion](https://github.com/meteor/meteor/discussions/12171) and in the [PR](https://github.com/meteor/meteor/pull/12202). +This means that if you don’t use third-party login on your project, you don’t need to add the package service-configuration anymore. #### Migration Steps From c16f3df846f91564bea3553f5aabdf0d39f65b7f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 10:48:24 -0300 Subject: [PATCH 252/293] tests: trying to make ci pass --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 70956fb22d..3f9ee0af69 100755 --- a/meteor +++ b/meteor @@ -146,5 +146,5 @@ fi exec "$DEV_BUNDLE/bin/node" \ --max-old-space-size=4096 \ --no-wasm-code-gc \ - ${TOOL_NODE_FLAGS} \ + "${TOOL_NODE_FLAGS}" \ "$METEOR" "$@" From 36702ee1c3eb153818439015241543fa4fdf9ab1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 10:50:26 -0300 Subject: [PATCH 253/293] revert c16f3df846 --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 3f9ee0af69..70956fb22d 100755 --- a/meteor +++ b/meteor @@ -146,5 +146,5 @@ fi exec "$DEV_BUNDLE/bin/node" \ --max-old-space-size=4096 \ --no-wasm-code-gc \ - "${TOOL_NODE_FLAGS}" \ + ${TOOL_NODE_FLAGS} \ "$METEOR" "$@" From fa8387c1c23838bcc1270157495bf86ba2295903 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 11:41:41 -0300 Subject: [PATCH 254/293] test: making the ci pass again --- tools/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/index.js b/tools/index.js index 6522c41c3d..8fb6686582 100644 --- a/tools/index.js +++ b/tools/index.js @@ -13,7 +13,7 @@ require("./cli/dev-bundle-bin-commands.js").then(function (child) { throw error; }); }); - +process.env.DISABLE_FIBERS = process.env.DISABLE_FIBERS || 0; function continueSetup() { // Set up the Babel transpiler require('./tool-env/install-babel.js'); From 0d5ddb0af2382889b31bb2949c6742da56c95bf2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 12:02:48 -0300 Subject: [PATCH 255/293] Revert "test: making the ci pass again" This reverts commit fa8387c1c23838bcc1270157495bf86ba2295903. --- tools/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/index.js b/tools/index.js index 8fb6686582..6522c41c3d 100644 --- a/tools/index.js +++ b/tools/index.js @@ -13,7 +13,7 @@ require("./cli/dev-bundle-bin-commands.js").then(function (child) { throw error; }); }); -process.env.DISABLE_FIBERS = process.env.DISABLE_FIBERS || 0; + function continueSetup() { // Set up the Babel transpiler require('./tool-env/install-babel.js'); From 7d2de151539ba31e8e6233238ec85c5a46edbea8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 12:19:11 -0300 Subject: [PATCH 256/293] chore: update dev bundle --- meteor | 2 +- npm-packages/meteor-babel/options.js | 6 +++--- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/meteor b/meteor index be2307e734..7003b348c5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.4 +BUNDLE_VERSION=14.21.1.5 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 93bb21b905..6816d68179 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,12 +185,12 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - + const isFiberDisabled = process.env.DISABLE_FIBERS || false; combined.plugins.push([require("./plugins/async-await.js"), { // Do not transform `await x` to `Promise.await(x)`, since Node // 8 has native support for await expressions. - useNativeAsyncAwait: !process.env.DISABLE_FIBERS, - isFiberDisabled: process.env.DISABLE_FIBERS, + useNativeAsyncAwait: !isFiberDisabled, + isFiberDisabled: isFiberDisabled, }]); // Enable async generator functions proposal. diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index f3b5642e8a..61c50ee1d5 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.1", + "version": "7.18.0-beta.2", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index 2d1de3e9e1..c0872399eb 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || !this.opts.isFiberDisabled) { + if (!node.async || this.opts.isFiberDisabled) { return; } diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 9fb98228b9..03fe5abf53 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.1", + "@meteorjs/babel": "7.18.0-beta.2", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 61fa84efc768b91cc83ab200a168f39c0d61a5c1 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 14 Dec 2022 14:43:47 -0400 Subject: [PATCH 257/293] new meteor-babel version --- npm-packages/meteor-babel/options.js | 1 + npm-packages/meteor-babel/package.json | 2 +- .../meteor-babel/plugins/async-await.js | 17 ++++++++++++----- scripts/dev-bundle-tool-package.js | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 6816d68179..e1287b8ca5 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -191,6 +191,7 @@ function getDefaultsForNode8(features) { // 8 has native support for await expressions. useNativeAsyncAwait: !isFiberDisabled, isFiberDisabled: isFiberDisabled, + overwriteFiberExit: process.env.OVERWRITE_FIBERS_EXIT === '1', }]); // Enable async generator functions proposal. diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 61c50ee1d5..cb7a5fb0ed 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.2", + "version": "7.18.0-beta.3", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c0872399eb..38abbff65f 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,14 +9,10 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || this.opts.isFiberDisabled) { + if (!node.async) { return; } - // The original function becomes a non-async function that - // returns a Promise. - node.async = false; - // The inner function should inherit lexical environment items // like `this`, `super`, and `arguments` from the outer // function, and arrow functions provide exactly that behavior. @@ -30,6 +26,17 @@ module.exports = function (babel) { !! this.opts.useNativeAsyncAwait ); + if (this.opts.isFiberDisabled && this.opts.overwriteFiberExit) { + if (node.type === "ArrowFunctionExpression") { + node.body = innerFn; + } + return; + } + + // The original function becomes a non-async function that + // returns a Promise. + node.async = false; + const promiseResultExpression = t.callExpression( t.memberExpression( t.identifier("Promise"), diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 03fe5abf53..d053cff797 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.2", + "@meteorjs/babel": "7.18.0-beta.3", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 6d24edca5dab36d705e5892a64eee73af770ba61 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 15:46:07 -0300 Subject: [PATCH 258/293] feat: new dev bundle :commet: --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 7003b348c5..dadfa87b20 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.5 +BUNDLE_VERSION=14.21.1.6 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From b82942d33605ce586fb675952213cc501f8a94ee Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 16:31:17 -0300 Subject: [PATCH 259/293] chore: update on dev bundle --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 70956fb22d..24d2dbb783 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.2.0 +BUNDLE_VERSION=14.21.2.1 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 34940db7c6a947c576cec831d69b95f226d4db10 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 20:00:31 -0300 Subject: [PATCH 260/293] Docs: updated 2.9.1 changelog --- docs/history.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/history.md b/docs/history.md index 2c41408d65..47cd81e0a3 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,43 @@ +## v2.9.1, 2022-XX-XX + +### Highlights + +* Reverted missing types [PR](https://github.com/meteor/meteor/pull/12366) by [Grubba27](https://github.com/Grubba27). +* Fix fetch() type declaration [PR](https://github.com/meteor/meteor/pull/12352) by [zarvox](https://github.com/zarvox). +* update svelte skeleton [PR](https://github.com/meteor/meteor/pull/12350) by [tosinek](https://github.com/tosinek). +* Bump to node 14.21.2.0 [PR](https://github.com/meteor/meteor/pull/12370) by [Grubba27](https://github.com/Grubba27). + +#### Breaking Changes + +N/A + +#### Internal API changes + +N/A + +#### Migration Steps + +N/a + +#### Meteor Version Release + +* `fetch@0.1.3`: + - Updated fetch type definition. +* `fetch@1.10.4: + - Added back meteor type definitions that were removed by mistake in earlier version. + +* `Comand line`: + - Updated Svelte skeleton to now be able to support typescript out of the box and some idioms to the skeleton + - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) + - +#### Special thanks to +- [@zarvox](https://github.com/zarvox). +- [@tosinek](https://github.com/tosinek). +- [@Grubba27](https://github.com/Grubba27). + +For making this great framework even better! + + ## v2.9, 2022-12-12 ### Highlights From dfaf5aebf0732ce524b8a5d18401c2403cbe7096 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 20:07:05 -0300 Subject: [PATCH 261/293] Meteor version to 2.9.1-beta.1 :comet: --- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/fetch/package.js b/packages/fetch/package.js index 79eec048f2..e65ca62183 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-beta.0', + version: '0.1.3-beta291.1', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index ee4b6a75b8..d242083410 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-beta.0', + version: '2.9.1-beta.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7022a02698..d589702138 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-beta.0' + version: '1.10.4-beta291.1' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index c826e4b54d..9ad4808c2c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.1.beta.0", + "version": "2.9.1.beta.1", "recommended": false, "official": false, "description": "Meteor experimental release" From 0ee038b24b95b3a955cb3c9b18cdaec3b0f8f9fd Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 15 Dec 2022 10:30:45 -0400 Subject: [PATCH 262/293] Create new version for meteor-babel New flag to ignore async plugin --- npm-packages/meteor-babel/options.js | 17 +++++++++-------- npm-packages/meteor-babel/package.json | 2 +- .../meteor-babel/plugins/async-await.js | 15 ++++----------- scripts/dev-bundle-tool-package.js | 2 +- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index e1287b8ca5..4454148783 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,15 +185,16 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - const isFiberDisabled = process.env.DISABLE_FIBERS || false; - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: !isFiberDisabled, - isFiberDisabled: isFiberDisabled, - overwriteFiberExit: process.env.OVERWRITE_FIBERS_EXIT === '1', - }]); + const isFiberDisabled = process.env.DISABLE_FIBERS === '1'; + const ignoreAsyncPlugin = process.env.IGNORE_ASYNC_PLUGIN === '1'; + if (!ignoreAsyncPlugin) { + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: isFiberDisabled, + }]); + } // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); } diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index cb7a5fb0ed..56a18465f3 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.3", + "version": "7.18.0-beta.4", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index 38abbff65f..9110ae383a 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -13,6 +13,10 @@ module.exports = function (babel) { return; } + // The original function becomes a non-async function that + // returns a Promise. + node.async = false; + // The inner function should inherit lexical environment items // like `this`, `super`, and `arguments` from the outer // function, and arrow functions provide exactly that behavior. @@ -26,17 +30,6 @@ module.exports = function (babel) { !! this.opts.useNativeAsyncAwait ); - if (this.opts.isFiberDisabled && this.opts.overwriteFiberExit) { - if (node.type === "ArrowFunctionExpression") { - node.body = innerFn; - } - return; - } - - // The original function becomes a non-async function that - // returns a Promise. - node.async = false; - const promiseResultExpression = t.callExpression( t.memberExpression( t.identifier("Promise"), diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index d053cff797..13c5ba5771 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.3", + "@meteorjs/babel": "7.18.0-beta.4", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 5eb91aab9f8628b27a9671c53764d620ecc19db8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 15 Dec 2022 11:33:58 -0300 Subject: [PATCH 263/293] Meteor version to 2.9.1-beta.2 :comet: --- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/fetch/package.js b/packages/fetch/package.js index e65ca62183..ba6933af1a 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-beta291.1', + version: '0.1.3-beta291.2', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index d242083410..d569d4ae7a 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-beta.1', + version: '2.9.1-beta.2', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index d589702138..cadc5f247b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-beta291.1' + version: '1.10.4-beta291.2' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 9ad4808c2c..6ff8224d31 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.1.beta.1", + "version": "2.9.1.beta.2", "recommended": false, "official": false, "description": "Meteor experimental release" From c3d11410a9140fcf91834ad70ce859feb7843b5e Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 15 Dec 2022 10:51:03 -0400 Subject: [PATCH 264/293] New dev bundle version --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index dadfa87b20..b99b7aedde 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.6 +BUNDLE_VERSION=14.21.1.7 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From c9ee57ceb0bcdb3ca33a079ff67f5b8ddc83cc7c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 15 Dec 2022 12:11:02 -0300 Subject: [PATCH 265/293] Meteor version to 2.9.1-beta.3 :comet: --- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/fetch/package.js b/packages/fetch/package.js index ba6933af1a..86050aff48 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-beta291.2', + version: '0.1.3-beta291.3', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index d569d4ae7a..bdc73e3b68 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-beta.2', + version: '2.9.1-beta.3', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index cadc5f247b..ad76232d21 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-beta291.2' + version: '1.10.4-beta291.3' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 6ff8224d31..3de04c2a36 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.1.beta.2", + "version": "2.9.1-beta.3", "recommended": false, "official": false, "description": "Meteor experimental release" From 24d87e19b22ba717d88b71cacd60fbd2d2bf1b9d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 15 Dec 2022 12:55:33 -0300 Subject: [PATCH 266/293] updated chmod From 91129808e078f0d8d0eb18acdf2c6479be515e97 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 15 Dec 2022 16:06:21 -0300 Subject: [PATCH 267/293] docs: updating meteor generate docs --- docs/source/commandline.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ebb9381d3a..1be73f5058 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -203,6 +203,10 @@ Create a basic [Solid](https://www.solidjs.com/) app. you what is the name of the model you want to generate, if you do want methods for your api and publications. It can be used as a command line only operation as well. +> _Important to note:_ +> By default, the generator will use JavaScript but if it detects that you have a +``tsconfig.json`` file in your project, it will use TypeScript instead. + running ```bash meteor generate customer From 8cc18f8897f1c0b792ea5bc26e3dbfdde6e61ea5 Mon Sep 17 00:00:00 2001 From: denihs Date: Fri, 16 Dec 2022 15:05:29 -0400 Subject: [PATCH 268/293] chore: changing the methods resetPassword and verifyEmail to no longer sign in the user automatically if they have 2fa enabled --- docs/history.md | 4 +++- docs/source/api/passwords.md | 7 ++++++ packages/accounts-password/package.js | 2 +- packages/accounts-password/password_client.js | 4 ++-- packages/accounts-password/password_server.js | 22 +++++++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/docs/history.md b/docs/history.md index 47cd81e0a3..4f25ea7ea0 100644 --- a/docs/history.md +++ b/docs/history.md @@ -9,7 +9,9 @@ #### Breaking Changes -N/A +* `accounts-password@2.3.3` + - The methods `resetPassword` and `verifyEmail` no longer logs the user if they have 2FA enabled. Now, the functions work as before, but instead of automatically logging in the user at the end, an error with the code `2fa-enabled` will be thrown. + #### Internal API changes diff --git a/docs/source/api/passwords.md b/docs/source/api/passwords.md index 49bcff2e6d..a1967e174e 100644 --- a/docs/source/api/passwords.md +++ b/docs/source/api/passwords.md @@ -59,6 +59,10 @@ email with a link the user can use to verify their email address. {% apibox "Accounts.verifyEmail" %} +If the user trying to verify the email has 2FA enabled, this error will be thrown: +* "Email verified, but user not logged in because 2FA is enabled [2fa-enabled]": No longer signing in the user automatically if the user has 2FA enabled. + + This function accepts tokens passed into the callback registered with [`Accounts.onEmailVerificationLink`](#Accounts-onEmailVerificationLink). @@ -89,6 +93,9 @@ This function accepts tokens passed into the callbacks registered with [`AccountsClient#onResetPasswordLink`](#Accounts-onResetPasswordLink) and [`Accounts.onEnrollmentLink`](#Accounts-onEnrollmentLink). +If the user trying to reset the password has 2FA enabled, this error will be thrown: +* "Changed password, but user not logged in because 2FA is enabled [2fa-enabled]": No longer signing in the user automatically if the user has 2FA enabled. + {% apibox "Accounts.setPassword" %} {% apibox "Accounts.sendResetPasswordEmail" %} diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 719191d8dc..ecf98e10ba 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2', + version: '2.3.3-beta291.3', }); Npm.depends({ diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 30d3b49450..a55609919e 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -201,7 +201,7 @@ Accounts.forgotPassword = (options, callback) => { // @param callback (optional) {Function(error|undefined)} /** - * @summary Reset the password for a user using a token received in email. Logs the user in afterwards. + * @summary Reset the password for a user using a token received in email. Logs the user in afterwards if the user doesn't have 2FA enabled. * @locus Client * @param {String} token The token retrieved from the reset password URL. * @param {String} newPassword A new password for the user. This is __not__ sent in plain text over the wire. @@ -234,7 +234,7 @@ Accounts.resetPassword = (token, newPassword, callback) => { // @param callback (optional) {Function(error|undefined)} /** - * @summary Marks the user's email address as verified. Logs the user in afterwards. + * @summary Marks the user's email address as verified. Logs the user in afterwards if the user doesn't have 2FA enabled. * @locus Client * @param {String} token The token retrieved from the verification URL. * @param {Function} [callback] Optional callback. Called with no arguments on success, or with a single `Error` argument on failure. diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index c44be77f66..198b7a9c34 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -687,6 +687,17 @@ Meteor.methods({resetPassword: async function (...args) { // password should invalidate existing sessions). Accounts._clearAllLoginTokens(user._id); + if (Accounts._check2faEnabled?.(user)) { + return { + userId: user._id, + error: Accounts._handleError( + 'Changed password, but user not logged in because 2FA is enabled', + false, + '2fa-enabled' + ), + }; + } + return {userId: user._id}; } ); @@ -778,6 +789,17 @@ Meteor.methods({verifyEmail: async function (...args) { {$set: {'emails.$.verified': true}, $pull: {'services.email.verificationTokens': {address: tokenRecord.address}}}); + if (Accounts._check2faEnabled?.(user)) { + return { + userId: user._id, + error: Accounts._handleError( + 'Email verified, but user not logged in because 2FA is enabled', + false, + '2fa-enabled' + ), + }; + } + return {userId: user._id}; } ); From 2f377966552c1c3fcc2282f451504d42071b40f1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 11:21:50 -0300 Subject: [PATCH 269/293] docs: update docs about --prototype --- docs/source/commandline.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 1be73f5058..333cc27219 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -91,6 +91,12 @@ You can pass an absolute or relative path. **Flags for default packages** +`--prototype` + +Creates a package with the prototype packages. +It can be used together with other flags that create apps such as `--react` or `--typescript`. + + `--bare` Creates a basic, blaze project. From 32a786a81ef7144eaa089dc83557d7427e931d51 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:00:19 -0300 Subject: [PATCH 270/293] docs: updated docs about --prototype --- docs/source/commandline.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 333cc27219..a3a242df17 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -93,7 +93,11 @@ You can pass an absolute or relative path. `--prototype` -Creates a package with the prototype packages. +Creates a package with the prototype purpose packages(`autopublish` and `insecure`) +if you use them you can change your collections quickly, +but it is not supposed to be used in production. +For more information about security you can check +it [here](https://guide.meteor.com/security.html#checklist) It can be used together with other flags that create apps such as `--react` or `--typescript`. From 40dfd2edbc3711093e0c4b0455f1ca35cd0e2970 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:38:37 -0300 Subject: [PATCH 271/293] chore: added permissions to run meteor script --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 meteor diff --git a/meteor b/meteor old mode 100644 new mode 100755 From 7778e74a735b6fec2df98fceb360c60e9efdbb93 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:38:50 -0300 Subject: [PATCH 272/293] chore: added permissions to run meteor script --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 meteor diff --git a/meteor b/meteor old mode 100755 new mode 100644 From 89dab6e8de0535159900c10d568245740a8ef759 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:38:57 -0300 Subject: [PATCH 273/293] chore: added permissions to run meteor script --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 meteor diff --git a/meteor b/meteor old mode 100644 new mode 100755 From a0d76557b183d4b3555aee554f0592da12a4f728 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:39:10 -0300 Subject: [PATCH 274/293] "chore: added permissions to run meteor script" --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 meteor diff --git a/meteor b/meteor old mode 100755 new mode 100644 From b73b31404ae9c9d6e9c138047b93bd37521884bd Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:43:30 -0300 Subject: [PATCH 275/293] chore: added permissions to run meteor script --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 meteor diff --git a/meteor b/meteor old mode 100644 new mode 100755 From d733351f04ca37616eab0d70dec20c91def119b0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 14:43:40 -0300 Subject: [PATCH 276/293] "chore: added permissions to run meteor script" --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 meteor diff --git a/meteor b/meteor old mode 100755 new mode 100644 From 190e396958e9ffbe8adc560828118fb948797829 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 19 Dec 2022 13:44:29 -0400 Subject: [PATCH 277/293] Changing meteor file permissions --- meteor | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 meteor diff --git a/meteor b/meteor old mode 100644 new mode 100755 From 7ee47054fd3547f658cb0089d537c38e3a657e44 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 15:24:30 -0300 Subject: [PATCH 278/293] doc: updated 2.9.1 docs --- docs/history.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 4f25ea7ea0..912c968c79 100644 --- a/docs/history.md +++ b/docs/history.md @@ -6,7 +6,8 @@ * Fix fetch() type declaration [PR](https://github.com/meteor/meteor/pull/12352) by [zarvox](https://github.com/zarvox). * update svelte skeleton [PR](https://github.com/meteor/meteor/pull/12350) by [tosinek](https://github.com/tosinek). * Bump to node 14.21.2.0 [PR](https://github.com/meteor/meteor/pull/12370) by [Grubba27](https://github.com/Grubba27). - +* resetPassword and verifyEmail to no longer sign in the user automatically [PR](https://github.com/meteor/meteor/pull/12385) by [denihs](https://github.com/denihs). +* #### Breaking Changes * `accounts-password@2.3.3` @@ -25,9 +26,13 @@ N/a * `fetch@0.1.3`: - Updated fetch type definition. + * `fetch@1.10.4: - Added back meteor type definitions that were removed by mistake in earlier version. +* `accounts-password@2.3.3` + - The methods `resetPassword` and `verifyEmail` no longer logs the user if they have 2FA enabled. Now, the functions work as before, but instead of automatically logging in the user at the end, an error with the code `2fa-enabled` will be thrown. + * `Comand line`: - Updated Svelte skeleton to now be able to support typescript out of the box and some idioms to the skeleton - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) @@ -36,6 +41,7 @@ N/a - [@zarvox](https://github.com/zarvox). - [@tosinek](https://github.com/tosinek). - [@Grubba27](https://github.com/Grubba27). +- [@denihs](https://github.com/denihs) For making this great framework even better! From 2660146d37629fa8ddde9833b5ce640714f139ae Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 15:39:27 -0300 Subject: [PATCH 279/293] Chore: update dev-bundle with devel --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 386ea5693b..1146deb2ff 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.2.1 +BUNDLE_VERSION=14.21.2.2 # OS Check. Put here because here is where we download the precompiled From 986de31ccbbc5ddfe7e1caef92569d282d424d8c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 16:56:06 -0300 Subject: [PATCH 280/293] Meteor version to 2.9.1-beta.4 :comet: --- packages/accounts-password/package.js | 2 +- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index ecf98e10ba..4a101f7ff6 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.3-beta291.3', + version: '2.3.3-beta291.4', }); Npm.depends({ diff --git a/packages/fetch/package.js b/packages/fetch/package.js index 86050aff48..0b52838105 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-beta291.3', + version: '0.1.3-beta291.4', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bdc73e3b68..9d8ac5e94b 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-beta.3', + version: '2.9.1-beta.4', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index ad76232d21..711be04d7e 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-beta291.3' + version: '1.10.4-beta291.4' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 3de04c2a36..8031905a03 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.1-beta.3", + "version": "2.9.1-beta.4", "recommended": false, "official": false, "description": "Meteor experimental release" From 1a8e3179668259e46630c9da09f7449417a729e9 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 19 Dec 2022 17:06:14 -0300 Subject: [PATCH 281/293] chore: updated will publish text to show version as well for better understatind --- tools/cli/commands-packages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 6a5c4d071c..9f26b97089 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -927,7 +927,7 @@ main.registerCommand({ return; } toPublish.push(packageName); - Console.info("Will publish new version for " + packageName); + Console.info(`Will publish new version for ${ packageName }: ${ packageSource.version }`); return; } else { var isopk = projectContext.isopackCache.getIsopack(packageName); From 9b7c9729b64ef5d7341dc905f1ac54150a910ed2 Mon Sep 17 00:00:00 2001 From: Dirk Stolle Date: Thu, 3 Nov 2022 16:59:22 +0100 Subject: [PATCH 282/293] update actions used in GitHub workflows to newest versions - bump actions/checkout to v3 - bump actions/setup-node to v3 - bump actions/labeler to v4 - bump nwtgck/actions-netlify to v1.2.4 --- .github/workflows/docs.yml | 6 +++--- .github/workflows/guide.yml | 6 +++--- .github/workflows/labeler.yml | 2 +- .github/workflows/npm-eslint-plugin-meteor.yml | 4 ++-- .github/workflows/npm-meteor-babel.yml | 4 ++-- .github/workflows/npm-meteor-promise.yml | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 168b487427..a9624d9ad1 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -10,14 +10,14 @@ jobs: run: working-directory: docs/ steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 12.x - name: Build the Docs run: npm ci && npm run build - name: Deploy to Netlify for preview - uses: nwtgck/actions-netlify@v1.2.2 + uses: nwtgck/actions-netlify@v1.2.4 with: publish-dir: './docs/public/' production-branch: devel diff --git a/.github/workflows/guide.yml b/.github/workflows/guide.yml index 4a8a7f1ce5..124b500ce9 100644 --- a/.github/workflows/guide.yml +++ b/.github/workflows/guide.yml @@ -10,14 +10,14 @@ jobs: run: working-directory: guide/ steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 12.x - name: Build the Guide run: npm ci && npm run build - name: Deploy to Netlify for preview - uses: nwtgck/actions-netlify@v1.2.2 + uses: nwtgck/actions-netlify@v1.2.4 with: publish-dir: './guide/public' production-branch: devel diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 1861d20d9e..a9d25b1e47 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -17,6 +17,6 @@ jobs: label: runs-on: ubuntu-latest steps: - - uses: actions/labeler@v3 + - uses: actions/labeler@v4 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/npm-eslint-plugin-meteor.yml b/.github/workflows/npm-eslint-plugin-meteor.yml index 33c0ca5921..b1415fb405 100644 --- a/.github/workflows/npm-eslint-plugin-meteor.yml +++ b/.github/workflows/npm-eslint-plugin-meteor.yml @@ -20,9 +20,9 @@ jobs: matrix: node-version: [12.x, 14.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: npm diff --git a/.github/workflows/npm-meteor-babel.yml b/.github/workflows/npm-meteor-babel.yml index c2a260b3ae..56ac244b85 100644 --- a/.github/workflows/npm-meteor-babel.yml +++ b/.github/workflows/npm-meteor-babel.yml @@ -20,9 +20,9 @@ jobs: matrix: node-version: [12.x, 14.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: npm diff --git a/.github/workflows/npm-meteor-promise.yml b/.github/workflows/npm-meteor-promise.yml index 6351c718fd..484ccd7769 100644 --- a/.github/workflows/npm-meteor-promise.yml +++ b/.github/workflows/npm-meteor-promise.yml @@ -20,9 +20,9 @@ jobs: matrix: node-version: [12.x, 14.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: npm From 3fd99a4c169c6496255a23cfb8510ee90535d69a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 21 Dec 2022 14:17:04 -0300 Subject: [PATCH 283/293] fix: missing vue2 declaration --- tools/cli/commands.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 22ffdebaeb..2467f05879 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -521,6 +521,7 @@ export const AVAILABLE_SKELETONS = [ DEFAULT_SKELETON, "typescript", "vue", + 'vue-2', "svelte", "tailwind", "chakra-ui", From 82b040762616128db9209222f3dd1f51c004c69f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 21 Dec 2022 14:25:40 -0300 Subject: [PATCH 284/293] docs: updated 2.9.1 docs --- docs/history.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/history.md b/docs/history.md index 912c968c79..42e99c987a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -7,7 +7,8 @@ * update svelte skeleton [PR](https://github.com/meteor/meteor/pull/12350) by [tosinek](https://github.com/tosinek). * Bump to node 14.21.2.0 [PR](https://github.com/meteor/meteor/pull/12370) by [Grubba27](https://github.com/Grubba27). * resetPassword and verifyEmail to no longer sign in the user automatically [PR](https://github.com/meteor/meteor/pull/12385) by [denihs](https://github.com/denihs). -* +* Added missing vue2 declaration for skeletons [PR](https://github.com/meteor/meteor/pull/12396) by [Grubba27](https://github.com/Grubba27) & [planning](https://github.com/mlanning) + #### Breaking Changes * `accounts-password@2.3.3` @@ -33,16 +34,16 @@ N/a * `accounts-password@2.3.3` - The methods `resetPassword` and `verifyEmail` no longer logs the user if they have 2FA enabled. Now, the functions work as before, but instead of automatically logging in the user at the end, an error with the code `2fa-enabled` will be thrown. -* `Comand line`: +* `Command line`: - Updated Svelte skeleton to now be able to support typescript out of the box and some idioms to the skeleton - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) - - + - Solved [issue](https://github.com/meteor/meteor/issues/12395) that could not allow vue2 apps being created in command line #### Special thanks to - [@zarvox](https://github.com/zarvox). - [@tosinek](https://github.com/tosinek). - [@Grubba27](https://github.com/Grubba27). - [@denihs](https://github.com/denihs) - +- [mlanning](https://github.com/mlanning) For making this great framework even better! From f094515825c30771359f8245e713a8dd123ace79 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 22 Dec 2022 10:28:48 -0300 Subject: [PATCH 285/293] Meteor version to 2.9.1-rc.0 :comet: --- packages/accounts-password/package.js | 2 +- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 4a101f7ff6..f93bca9c7c 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.3-beta291.4', + version: '2.3.3-rc291.0', }); Npm.depends({ diff --git a/packages/fetch/package.js b/packages/fetch/package.js index 0b52838105..b868b2df94 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-beta291.4', + version: '0.1.3-rc291.0', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 9d8ac5e94b..a252d11ff3 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-beta.4', + version: '2.9.1-rc.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 711be04d7e..75067dae3b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-beta291.4' + version: '1.10.4-rc291.0' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 8031905a03..7a18f6f0ef 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.1-beta.4", + "version": "2.9.1-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" From fdec5f2ea6ea20144abd0ed94d231302f9ee2fbf Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 27 Dec 2022 10:06:57 +0900 Subject: [PATCH 286/293] #12398 doc fix --- docs/history.md | 2 +- guide/source/2.9-migration.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 2c41408d65..a1ebdc3b7a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -31,7 +31,7 @@ by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes - N/A +* `Accounts.createUserVerifyingEmail` is now async #### Internal API changes * Internal methods from `OAuth` that are now async: diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md index 6da327420a..41e18525dd 100644 --- a/guide/source/2.9-migration.md +++ b/guide/source/2.9-migration.md @@ -70,6 +70,12 @@ We now have async version of methods that you already use. They are: - [Meteor.userAsync()](https://github.com/meteor/meteor/pull/12274) - [CssTools.minifyCssAsync()](https://github.com/meteor/meteor/pull/12105) +

Breaking async

+ +`Accounts.createUserVerifyingEmail` is now completely async: + +- [Accounts.createUserVerifyingEmail](https://github.com/meteor/meteor/issues/12398) +

Accounts-base without service-configuration

Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. From a134c818752ff0094edad7ab138bd9e33809069e Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 27 Dec 2022 10:11:10 +0900 Subject: [PATCH 287/293] #12398 add migration example --- guide/source/2.9-migration.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md index 41e18525dd..0ea83e0730 100644 --- a/guide/source/2.9-migration.md +++ b/guide/source/2.9-migration.md @@ -76,6 +76,37 @@ We now have async version of methods that you already use. They are: - [Accounts.createUserVerifyingEmail](https://github.com/meteor/meteor/issues/12398) +To upgrade change from +```js +Meteor.methods({ + createUserAccount (user) { + /** + * This seems to be the issue. + * Using the other method `createUser` works as expected. + */ + Accounts.createUserVerifyingEmail({ + username: user.username, + email: user.email, + password: user.password, + }); + } +}); +``` + +to + +```js +Meteor.methods({ + async createUserAccount (user) { + await Accounts.createUserVerifyingEmail({ + username: user.username, + email: user.email, + password: user.password, + }); + } +}); +``` +

Accounts-base without service-configuration

Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. From 2be640693740f9852d61a4782b86c4ac0ad9126e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 27 Dec 2022 13:37:06 -0300 Subject: [PATCH 288/293] docs: updated 2.9.1 docs --- docs/history.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/history.md b/docs/history.md index 42e99c987a..e18f1b1981 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,4 +1,4 @@ -## v2.9.1, 2022-XX-XX +## v2.9.1, 2022-12-27 ### Highlights @@ -7,7 +7,7 @@ * update svelte skeleton [PR](https://github.com/meteor/meteor/pull/12350) by [tosinek](https://github.com/tosinek). * Bump to node 14.21.2.0 [PR](https://github.com/meteor/meteor/pull/12370) by [Grubba27](https://github.com/Grubba27). * resetPassword and verifyEmail to no longer sign in the user automatically [PR](https://github.com/meteor/meteor/pull/12385) by [denihs](https://github.com/denihs). -* Added missing vue2 declaration for skeletons [PR](https://github.com/meteor/meteor/pull/12396) by [Grubba27](https://github.com/Grubba27) & [planning](https://github.com/mlanning) +* Added missing vue2 declaration for skeletons [PR](https://github.com/meteor/meteor/pull/12396) by [Grubba27](https://github.com/Grubba27) & [mlanning](https://github.com/mlanning) #### Breaking Changes @@ -21,14 +21,14 @@ N/A #### Migration Steps -N/a +N/A #### Meteor Version Release * `fetch@0.1.3`: - Updated fetch type definition. -* `fetch@1.10.4: +* `meteor@1.10.4`: - Added back meteor type definitions that were removed by mistake in earlier version. * `accounts-password@2.3.3` @@ -38,12 +38,14 @@ N/a - Updated Svelte skeleton to now be able to support typescript out of the box and some idioms to the skeleton - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) - Solved [issue](https://github.com/meteor/meteor/issues/12395) that could not allow vue2 apps being created in command line + #### Special thanks to - [@zarvox](https://github.com/zarvox). - [@tosinek](https://github.com/tosinek). - [@Grubba27](https://github.com/Grubba27). -- [@denihs](https://github.com/denihs) -- [mlanning](https://github.com/mlanning) +- [@denihs](https://github.com/denihs). +- [@mlanning](https://github.com/mlanning). + For making this great framework even better! From 0d9abe8b75c3477e22d13594ac4bbc10a2ecb7cf Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 27 Dec 2022 13:39:40 -0300 Subject: [PATCH 289/293] docs: updated unclear definitions --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index db5f6cdd85..25430a93e5 100644 --- a/docs/history.md +++ b/docs/history.md @@ -35,7 +35,7 @@ N/A - The methods `resetPassword` and `verifyEmail` no longer logs the user if they have 2FA enabled. Now, the functions work as before, but instead of automatically logging in the user at the end, an error with the code `2fa-enabled` will be thrown. * `Command line`: - - Updated Svelte skeleton to now be able to support typescript out of the box and some idioms to the skeleton + - Updated Svelte skeleton to now be able to support typescript out of the box and added ``#each`` in links in the skeleton. - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) - Solved [issue](https://github.com/meteor/meteor/issues/12395) that could not allow vue2 apps being created in command line From 67ba2f65a6619b1a38ecf42bf2816e0d811e2ef5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 27 Dec 2022 13:43:35 -0300 Subject: [PATCH 290/293] docs: added missing ponctuation in history.md --- docs/history.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/history.md b/docs/history.md index 25430a93e5..6a845af21d 100644 --- a/docs/history.md +++ b/docs/history.md @@ -7,7 +7,7 @@ * update svelte skeleton [PR](https://github.com/meteor/meteor/pull/12350) by [tosinek](https://github.com/tosinek). * Bump to node 14.21.2.0 [PR](https://github.com/meteor/meteor/pull/12370) by [Grubba27](https://github.com/Grubba27). * resetPassword and verifyEmail to no longer sign in the user automatically [PR](https://github.com/meteor/meteor/pull/12385) by [denihs](https://github.com/denihs). -* Added missing vue2 declaration for skeletons [PR](https://github.com/meteor/meteor/pull/12396) by [Grubba27](https://github.com/Grubba27) & [mlanning](https://github.com/mlanning) +* Added missing vue2 declaration for skeletons [PR](https://github.com/meteor/meteor/pull/12396) by [Grubba27](https://github.com/Grubba27) & [mlanning](https://github.com/mlanning). #### Breaking Changes @@ -36,8 +36,8 @@ N/A * `Command line`: - Updated Svelte skeleton to now be able to support typescript out of the box and added ``#each`` in links in the skeleton. - - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2) - - Solved [issue](https://github.com/meteor/meteor/issues/12395) that could not allow vue2 apps being created in command line + - Updated node to 14.21.2 changes can be seen [here](https://github.com/nodejs/node/releases/tag/v14.21.2). + - Solved [issue](https://github.com/meteor/meteor/issues/12395) that could not allow vue2 apps being created in command line. #### Special thanks to - [@zarvox](https://github.com/zarvox). From bc3d27e022c8363b6293bc73725aa38b8915f560 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 27 Dec 2022 13:59:41 -0300 Subject: [PATCH 291/293] Meteor version to 2.9.1 :comet: --- packages/accounts-password/package.js | 2 +- packages/fetch/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index f93bca9c7c..2b23a6373d 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.3-rc291.0', + version: '2.3.3', }); Npm.depends({ diff --git a/packages/fetch/package.js b/packages/fetch/package.js index b868b2df94..1d13e505d5 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.3-rc291.0', + version: '0.1.3', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index a252d11ff3..e31fcbacf3 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.1-rc.0', + version: '2.9.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 75067dae3b..9056fec7d6 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.4-rc291.0' + version: '1.10.4' }); Package.registerBuildPlugin({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 27a0c865e4..2920330372 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.9.1", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From aaefcc9abf3375873e902174ee55acba52350e15 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Fri, 30 Dec 2022 11:24:39 +1100 Subject: [PATCH 292/293] docs: Fix a few typos There are small typos in: - docs/source/commandline.md - tools/isobuild/compiler-deprecated-compile-step.js - tools/utils/buildmessage.js Fixes: - Should read `libraries` rather than `libaries`. - Should read `file name` rather than `filenanme`. - Should read `compatibility` rather than `compitability`. Signed-off-by: Tim Gates --- docs/source/commandline.md | 2 +- tools/isobuild/compiler-deprecated-compile-step.js | 2 +- tools/utils/buildmessage.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index a3a242df17..db994e03e1 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -926,7 +926,7 @@ from npm to your `node_modules` directory and save its usage in your Using the `meteor npm ...` commands in place of traditional `npm ...` commands is particularly important when using Node.js modules that have binary dependencies that make native C calls (like [`bcrypt`](https://www.npmjs.com/package/bcrypt)) -because doing so ensures that they are built using the same libaries. +because doing so ensures that they are built using the same libraries. Additionally, this access to the npm that comes with Meteor avoids the need to download and install npm separately. diff --git a/tools/isobuild/compiler-deprecated-compile-step.js b/tools/isobuild/compiler-deprecated-compile-step.js index fe3b9c76c8..0fad0c671d 100644 --- a/tools/isobuild/compiler-deprecated-compile-step.js +++ b/tools/isobuild/compiler-deprecated-compile-step.js @@ -1,7 +1,7 @@ // This file contains an old definition of CompileStep, an object that is passed // to the package-provided file handler. // Since then, the newer API called "Batch Plugins" have replaced it but we keep -// the functionality for the backwards-compitability. +// the functionality for the backwards-compatibility. // @deprecated // XXX COMPAT WITH 1.1.0.2 diff --git a/tools/utils/buildmessage.js b/tools/utils/buildmessage.js index 0d468624c1..48cbec19c4 100644 --- a/tools/utils/buildmessage.js +++ b/tools/utils/buildmessage.js @@ -75,7 +75,7 @@ Object.assign(Job.prototype, { } line += ": "; } else { - // not sure how to display messages without a filenanme.. try this? + // not sure how to display messages without a file name.. try this? line += "error: "; } // XXX line wrapping would be nice.. From 5e0331a7b71f76850182ef73fcdfdbd7189276db Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 4 Jan 2023 13:33:45 -0300 Subject: [PATCH 293/293] Meteor version to 2.9.1 :comet: --- npm-packages/meteor-installer/README.md | 2 ++ npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index 91ad13de8f..54dc2a47b1 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,6 +14,8 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| +| 2.9.1 | 2.9.1 | +| 2.9.0 | 2.9.0 | | 2.8.2 | 2.8.1 | | 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index fcae57bcec..4c2e1ac925 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.9.0'; +const METEOR_LATEST_VERSION = '2.9.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 53d344ef33..af52942de4 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.9.0", + "version": "2.9.1", "description": "Install Meteor", "main": "install.js", "scripts": {