diff --git a/History.md b/History.md index eee0fa0f04..1c7e25355c 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,82 @@ +## v2.2, 2021-04-15 + +#### Highlights + +- MongoDB Update to 4.4.4 +- Cordova Update to 10 +- Typescript Update to 4.2.2 +- New skeleton: `meteor create myapp --svelte` + +### Breaking changes + +* N/A + +### Migration steps + +* `meteor-tool` maybe you need to install the new Visual C++ Redistributable for Visual Studio 2019 to run MongoDB 4.4.4 on Windows. [read more](https://docs.meteor.com/windows.html) + +* `mongo` package is now using useUnifiedTopology as `true` by default otherwise the new driver was producing a warning (see details below). It's important to test your app with this change. + +* `cordova` plugins and main libraries were updated from 9 to 10. It's important to test your app with these changes. + +* `typescript` was updated to 4.2.2, make sure your read the [breaking changes](https://devblogs.microsoft.com/typescript/announcing-typescript-4-2/#breaking-changes). + +#### Meteor Version Release + +* `meteor-tool@2.2` + - Update embedded MongoDB version to 4.4.4 [#11341](https://github.com/meteor/meteor/pull/11341) + - Maybe you need to install the new Visual C++ Redistributable for Visual Studio 2019 to run on Windows. [read more](https://docs.meteor.com/windows.html) + - Fix WindowsLikeFilesystem true when release string includes case insensitive word microsoft. [#11321](https://github.com/meteor/meteor/pull/11321) + - Fix absoluteFilePath on Windows. [#11346](https://github.com/meteor/meteor/pull/11346) + - New skeleton: `meteor create myapp --svelte` + - Update Blaze skeleton to use HMR + +* `npm-mongo@3.9.0` + - Update MongoDB driver version to 3.6.6 + +* `mongo@1.11.0` + - Using useUnifiedTopology as `true` by default to avoid the warning: `(node:59240) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor. You can still use it as false with `Mongo._connectionOptions` or `Meteor.settings?.packages?.mongo?.options`. + +* `cordova@10` + - Update Cordova to 10.0.0 [#11208](https://github.com/meteor/meteor/pull/11208) + +* `typescript@4.2.2` + - Update Typescript to 4.2.2, make sure your read the [breaking changes](https://devblogs.microsoft.com/typescript/announcing-typescript-4-2/#breaking-changes) [#11329](https://github.com/meteor/meteor/pull/11329) + +* `accounts-base@1.9.0` + - Allow to set token expiration to be set in milliseconds. [#11366](https://github.com/meteor/meteor/pull/11366) + +* `facebook-oauth@1.9.0` + - Upgrade default Facebook API to v10 & allow overriding this value. [#11362](https://github.com/meteor/meteor/pull/11362) + +* `minimongo@1.6.2` + - Add [$mul](https://docs.mongodb.com/manual/reference/operator/update/mul/#up._S_mul) to minimongo. [#11364](https://github.com/meteor/meteor/pull/11364) + +* `webapp@1.10.1` + - Fix for UNIX sockets with node cluster. [#11369](https://github.com/meteor/meteor/pull/11369) + +## v2.1.1, 2021-04-06 + +### Changes + +#### Highlights + +- Node.js security [update](https://nodejs.org/en/blog/vulnerability/april-2021-security-releases/) to 12.22.1 + +#### Meteor Version Release + +* `meteor-tool@2.1.1` + - Node.js security [update](https://nodejs.org/en/blog/vulnerability/april-2021-security-releases/) to 12.22.1 + - npm update to 6.14.12 + +### Breaking changes + +* N/A + +### Migration steps + +* N/A + ## v2.1, 2021-02-24 ### Changes diff --git a/README.md b/README.md index 4fbd18c927..c2d7683b53 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ Try a getting started tutorial: * [React](https://react-tutorial.meteor.com) * [Blaze](https://blaze-tutorial.meteor.com/) * [Angular](https://www.meteor.com/tutorials/angular/creating-an-app) - * [Vue](https://www.meteor.com/tutorials/vue/creating-an-app) - * [Svelte](https://www.meteor.com/tutorials/svelte/creating-an-app) + * [Vue](https://vue-tutorial.meteor.com/) + * [Svelte](https://svelte-tutorial.meteor.com/) Next, read the [guide](https://guide.meteor.com) and the [documentation](https://docs.meteor.com/). diff --git a/appveyor.yml b/appveyor.yml index 7c1ca47fdd..de63e8fd72 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ branches: skip_branch_with_pr: true clone_folder: C:\projects\meteor -image: Visual Studio 2015 +image: Visual Studio 2019 environment: METEOR_PRETTY_OUTPUT: 0 diff --git a/meteor b/meteor index 0a1b5ad62e..0ae0c66be8 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=12.21.0.0 +BUNDLE_VERSION=12.22.1.2 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 6d79647497..173f3dcf61 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,6 +1,6 @@ const path = require('path'); -const METEOR_LATEST_VERSION = '2.1'; +const METEOR_LATEST_VERSION = '2.2'; const localAppData = process.env.LOCALAPPDATA; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index d1829d7c1b..2d63b1ce37 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.1.0", + "version": "2.2.1", "description": "Install Meteor on Windows", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index 42bf754bb9..7e3e581f25 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -161,9 +161,12 @@ export class AccountsCommon { * @param {Boolean} options.forbidClientAccountCreation Calls to [`createUser`](#accounts_createuser) from the client will be rejected. In addition, if you are using [accounts-ui](#accountsui), the "Create account" link will not be available. * @param {String | Function} options.restrictCreationByEmailDomain If set to a string, only allows new users if the domain part of their email address matches the string. If set to a function, only allows new users if the function returns true. The function is passed the full email address of the proposed new user. Works with password-based sign-in and external services that expose email addresses (Google, Facebook, GitHub). All existing users still can log in after enabling this option. Example: `Accounts.config({ restrictCreationByEmailDomain: 'school.edu' })`. * @param {Number} options.loginExpirationInDays The number of days from when a user logs in until their token expires and they are logged out. Defaults to 90. Set to `null` to disable login expiration. - * @param {String} options.oauthSecretKey When using the `oauth-encryption` package, the 16 byte key using to encrypt sensitive account credentials in the database, encoded in base64. This option may only be specifed on the server. See packages/oauth-encryption/README.md for details. + * @param {Number} options.loginExpiration The number of milliseconds from when a user logs in until their token expires and they are logged out, for a more granular control. If `loginExpirationInDays` is set, it takes precedent. + * @param {String} options.oauthSecretKey When using the `oauth-encryption` package, the 16 byte key using to encrypt sensitive account credentials in the database, encoded in base64. This option may only be specified on the server. See packages/oauth-encryption/README.md for details. * @param {Number} options.passwordResetTokenExpirationInDays The number of days from when a link to reset password is sent until token expires and user can't reset password with the link anymore. Defaults to 3. - * @param {Number} options.passwordEnrollTokenExpirationInDays The number of days from when a link to set inital password is sent until token expires and user can't set password with the link anymore. Defaults to 30. + * @param {Number} options.passwordResetTokenExpiration The number of milliseconds from when a link to reset password is sent until token expires and user can't reset password with the link anymore. If `passwordResetTokenExpirationInDays` is set, it takes precedent. + * @param {Number} options.passwordEnrollTokenExpirationInDays The number of days from when a link to set initial password is sent until token expires and user can't set password with the link anymore. Defaults to 30. + * @param {Number} options.passwordEnrollTokenExpiration The number of milliseconds from when a link to set initial password is sent until token expires and user can't set password with the link anymore. If `passwordEnrollTokenExpirationInDays` is set, it takes precedent. * @param {Boolean} options.ambiguousErrorMessages Return ambiguous error messages from login failures to prevent user enumeration. Defaults to false. * @param {MongoFieldSpecifier} options.defaultFieldSelector To exclude by default large custom fields from `Meteor.user()` and `Meteor.findUserBy...()` functions when called without a field selector, and all `onLogin`, `onLoginFailure` and `onLogout` callbacks. Example: `Accounts.config({ defaultFieldSelector: { myBigArray: 0 }})`. */ @@ -198,8 +201,9 @@ export class AccountsCommon { } // validate option keys - const VALID_KEYS = ["sendVerificationEmail", "forbidClientAccountCreation", "passwordEnrollTokenExpirationInDays", - "restrictCreationByEmailDomain", "loginExpirationInDays", "passwordResetTokenExpirationInDays", + const VALID_KEYS = ["sendVerificationEmail", "forbidClientAccountCreation", "passwordEnrollTokenExpiration", + "passwordEnrollTokenExpirationInDays", "restrictCreationByEmailDomain", "loginExpirationInDays", + "loginExpiration", "passwordResetTokenExpirationInDays", "passwordResetTokenExpiration", "ambiguousErrorMessages", "bcryptRounds", "defaultFieldSelector"]; Object.keys(options).forEach(key => { @@ -295,18 +299,18 @@ export class AccountsCommon { (this._options.loginExpirationInDays === null) ? LOGIN_UNEXPIRING_TOKEN_DAYS : this._options.loginExpirationInDays; - return (loginExpirationInDays - || DEFAULT_LOGIN_EXPIRATION_DAYS) * 24 * 60 * 60 * 1000; + return this._options.loginExpiration || (loginExpirationInDays + || DEFAULT_LOGIN_EXPIRATION_DAYS) * 86400000; } _getPasswordResetTokenLifetimeMs() { - return (this._options.passwordResetTokenExpirationInDays || - DEFAULT_PASSWORD_RESET_TOKEN_EXPIRATION_DAYS) * 24 * 60 * 60 * 1000; + return this._options.passwordResetTokenExpiration || (this._options.passwordResetTokenExpirationInDays || + DEFAULT_PASSWORD_RESET_TOKEN_EXPIRATION_DAYS) * 86400000; } _getPasswordEnrollTokenLifetimeMs() { - return (this._options.passwordEnrollTokenExpirationInDays || - DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS) * 24 * 60 * 60 * 1000; + return this._options.passwordEnrollTokenExpiration || (this._options.passwordEnrollTokenExpirationInDays || + DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS) * 86400000; } _tokenExpiration(when) { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 09094a0891..d494e1b3ba 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: "1.8.0", + version: "1.9.0", }); Package.onUse(api => { diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 32c0d2c752..b496659435 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,106 +2,116 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==" + }, + "@babel/compat-data": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==" }, "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", + "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", "dependencies": { "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==" + "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.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==" + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==" }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==" + }, + "@babel/helper-compilation-targets": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==" + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==" + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==" }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==" + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==" }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==" }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==" }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==" }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==" + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==" }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==" }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==" }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==" }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.12.1", @@ -109,64 +119,69 @@ "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==" }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==" }, "@babel/helper-validator-identifier": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==" }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==" + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==" }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==" + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==" }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==" + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==" + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==" + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==" + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -174,9 +189,9 @@ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==" + "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==" }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", @@ -184,9 +199,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==" }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", @@ -209,89 +224,89 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==" }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==" }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==" }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==" }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==" + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==" }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==" }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==" }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz", - "integrity": "sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw==" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", + "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz", - "integrity": "sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg==" + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==" }, "@babel/plugin-transform-react-pure-annotations": { "version": "7.12.1", @@ -299,69 +314,69 @@ "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==" }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==" }, "@babel/plugin-transform-runtime": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", - "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==" + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", + "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==" }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==" }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==" + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==" }, "@babel/preset-react": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.10.tgz", - "integrity": "sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==" + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", + "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==" }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==" + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", + "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==" }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==" }, "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==" + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==" }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==" + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==" }, "acorn": { "version": "6.4.2", @@ -473,6 +488,21 @@ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" }, + "babel-plugin-polyfill-corejs2": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", + "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==" + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==" + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", + "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==" + }, "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", @@ -538,10 +568,20 @@ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==" + }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==" + "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.30001205", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz", + "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==" }, "chalk": { "version": "2.4.2", @@ -558,11 +598,28 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" }, + "core-js-compat": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", + "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -573,6 +630,16 @@ "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.3.703", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz", + "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -594,9 +661,9 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==" + "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", @@ -614,9 +681,14 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "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.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==" }, "js-tokens": { "version": "4.0.0", @@ -634,9 +706,14 @@ "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==" }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, "magic-string": { "version": "0.25.7", @@ -644,9 +721,9 @@ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" }, "meteor-babel": { - "version": "7.10.6", - "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.10.6.tgz", - "integrity": "sha512-ppyHxsglz8e55N0KsCHsBFrnO/rXEubNf8PnhkQkUEfjFwFdqd4oF/uZNe99Pqa/C8+rR5Q3bMvj8zbesF1dhA==" + "version": "7.10.7", + "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.10.7.tgz", + "integrity": "sha512-Ed9ckTjKjItwWA15AANvGpLKP1LwW8xiyt1kAEOGVVRjtBraLbt7U0dm1meT5jSRF53A5bk+aQtlReninIDf8A==" }, "meteor-babel-helpers": { "version": "0.0.3", @@ -663,6 +740,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -673,6 +755,11 @@ "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.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -704,9 +791,9 @@ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dependencies": { "jsesc": { "version": "0.5.0", @@ -718,7 +805,19 @@ "reify": { "version": "0.20.12", "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", - "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==" + "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" }, "safe-buffer": { "version": "5.1.2", @@ -726,9 +825,9 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "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", @@ -751,9 +850,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==" }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 551ad357c3..65017c5f7b 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,11 +6,11 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '7.6.0' + version: '7.6.1' }); Npm.depends({ - 'meteor-babel': '7.10.6', + 'meteor-babel': '7.10.7', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 1505d14f32..fd6f1aa539 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.15.0', + version: '0.15.1', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md' }); diff --git a/packages/facebook-oauth/CHANGELOG.md b/packages/facebook-oauth/CHANGELOG.md index 5fbc7693da..a772af6e78 100644 --- a/packages/facebook-oauth/CHANGELOG.md +++ b/packages/facebook-oauth/CHANGELOG.md @@ -1,4 +1,11 @@ -## Changelog +# Changelog +## 1.8.0 - unreleased +### Breaking changes +- N/A + +### Changes +- Updated to use Facebook GraphAPI v10 +- You can now override the default API version by setting `Meteor.settings.public.packages.facebook-oauth.apiVersion` to for example `8.0` ## 1.7.3 - 2020-10-05 ### Breaking changes diff --git a/packages/facebook-oauth/facebook_client.js b/packages/facebook-oauth/facebook_client.js index 3f6d39abff..e6f78f320d 100644 --- a/packages/facebook-oauth/facebook_client.js +++ b/packages/facebook-oauth/facebook_client.js @@ -30,8 +30,10 @@ Facebook.requestCredential = (options, credentialRequestCompleteCallback) => { const loginStyle = OAuth._loginStyle('facebook', config, options); + const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '10.0'; + let loginUrl = - `https://www.facebook.com/v8.0/dialog/oauth?client_id=${config.appId}` + + `https://www.facebook.com/v${API_VERSION}/dialog/oauth?client_id=${config.appId}` + `&redirect_uri=${OAuth._redirectUri('facebook', config, options.params, options.absoluteUrlOptions)}` + `&display=${display}&scope=${scope}` + `&state=${OAuth._stateParam(loginStyle, credentialToken, options && options.redirectUrl)}`; diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index 08331bbb6a..1d8ff7b6b4 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -1,6 +1,8 @@ Facebook = {}; import crypto from 'crypto'; +const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '10.0'; + Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ @@ -65,7 +67,7 @@ const getTokenResponse = query => { const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); // Request an access token responseContent = HTTP.get( - "https://graph.facebook.com/v8.0/oauth/access_token", { + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { params: { client_id: config.appId, redirect_uri: redirectUri, @@ -104,7 +106,7 @@ const getIdentity = (accessToken, fields) => { hmac.update(accessToken); try { - return HTTP.get("https://graph.facebook.com/v8.0/me", { + return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { params: { access_token: accessToken, appsecret_proof: hmac.digest('hex'), diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index b789d4fd98..1b74f7d5b8 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,13 +1,13 @@ Package.describe({ summary: "Facebook OAuth flow", - version: "1.7.4" + version: "1.8.0" }); Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http', ['server']); + api.use('http@1.4.3', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 490eba935f..81d856243c 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.1.0' + version: '2.2.0' }); Package.includeTool(); diff --git a/packages/minimongo/NOTES b/packages/minimongo/NOTES.md similarity index 100% rename from packages/minimongo/NOTES rename to packages/minimongo/NOTES.md diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index 38b4d5c3a6..e3668eeb03 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -1468,6 +1468,24 @@ const MODIFIERS = { target[field] = new Date(); }, + $inc(target, field, arg) { + if (typeof arg !== 'number') { + throw MinimongoError('Modifier $inc allowed for numbers only', {field}); + } + + if (field in target) { + if (typeof target[field] !== 'number') { + throw MinimongoError( + 'Cannot apply $inc modifier to non-number', + {field} + ); + } + + target[field] += arg; + } else { + target[field] = arg; + } + }, $min(target, field, arg) { if (typeof arg !== 'number') { throw MinimongoError('Modifier $min allowed for numbers only', {field}); @@ -1508,24 +1526,64 @@ const MODIFIERS = { target[field] = arg; } }, - $inc(target, field, arg) { + $mul(target, field, arg) { if (typeof arg !== 'number') { - throw MinimongoError('Modifier $inc allowed for numbers only', {field}); + throw MinimongoError('Modifier $mul allowed for numbers only', {field}); } if (field in target) { if (typeof target[field] !== 'number') { throw MinimongoError( - 'Cannot apply $inc modifier to non-number', + 'Cannot apply $mul modifier to non-number', {field} ); } - target[field] += arg; + target[field] *= arg; } else { - target[field] = arg; + target[field] = 0; } }, + $rename(target, field, arg, keypath, doc) { + // no idea why mongo has this restriction.. + if (keypath === arg) { + throw MinimongoError('$rename source must differ from target', {field}); + } + + if (target === null) { + throw MinimongoError('$rename source field invalid', {field}); + } + + if (typeof arg !== 'string') { + throw MinimongoError('$rename target must be a string', {field}); + } + + if (arg.includes('\0')) { + // Null bytes are not allowed in Mongo field names + // https://docs.mongodb.com/manual/reference/limits/#Restrictions-on-Field-Names + throw MinimongoError( + 'The \'to\' field for $rename cannot contain an embedded null byte', + {field} + ); + } + + if (target === undefined) { + return; + } + + const object = target[field]; + + delete target[field]; + + const keyparts = arg.split('.'); + const target2 = findModTarget(doc, keyparts, {forbidArray: true}); + + if (target2 === null) { + throw MinimongoError('$rename target field invalid', {field}); + } + + target2[keyparts.pop()] = object; + }, $set(target, field, arg) { if (target !== Object(target)) { // not an array or an object const error = MinimongoError( @@ -1810,46 +1868,6 @@ const MODIFIERS = { !arg.some(element => LocalCollection._f._equal(object, element)) ); }, - $rename(target, field, arg, keypath, doc) { - // no idea why mongo has this restriction.. - if (keypath === arg) { - throw MinimongoError('$rename source must differ from target', {field}); - } - - if (target === null) { - throw MinimongoError('$rename source field invalid', {field}); - } - - if (typeof arg !== 'string') { - throw MinimongoError('$rename target must be a string', {field}); - } - - if (arg.includes('\0')) { - // Null bytes are not allowed in Mongo field names - // https://docs.mongodb.com/manual/reference/limits/#Restrictions-on-Field-Names - throw MinimongoError( - 'The \'to\' field for $rename cannot contain an embedded null byte', - {field} - ); - } - - if (target === undefined) { - return; - } - - const object = target[field]; - - delete target[field]; - - const keyparts = arg.split('.'); - const target2 = findModTarget(doc, keyparts, {forbidArray: true}); - - if (target2 === null) { - throw MinimongoError('$rename target field invalid', {field}); - } - - target2[keyparts.pop()] = object; - }, $bit(target, field, arg) { // XXX mongo only supports $bit on integers, and we only support // native javascript numbers (doubles) so far, so we can't support $bit diff --git a/packages/minimongo/minimongo_tests_client.js b/packages/minimongo/minimongo_tests_client.js index 658f8e12db..95526acaea 100644 --- a/packages/minimongo/minimongo_tests_client.js +++ b/packages/minimongo/minimongo_tests_client.js @@ -2659,6 +2659,27 @@ Tinytest.add('minimongo - modify', test => { modify({a: {b: 2}}, {$min: {'a.c': 10}}, {a: {b: 2, c: 10}}); exception({}, {$min: {_id: 1}}); + //$mul + modify({a: 1, b: 1}, {$mul: {b: 2}}, {a: 1, b: 2}); + modify({a: 1, b: 1}, {$mul: {c: 2}}, {a: 1, b: 1, c: 0}); + modify({a: 1, b: 2}, {$mul: {b: 2}}, {a: 1, b: 4}); + modify({a: 1, b: 2}, {$mul: {b: 10}}, {a: 1, b: 20}); + exception({a: 1}, {$mul: {a: '10'}}); + exception({a: 1}, {$mul: {a: true}}); + exception({a: 1}, {$mul: {a: [10]}}); + exception({a: '1'}, {$mul: {a: 10}}); + exception({a: [1]}, {$mul: {a: 10}}); + exception({a: {}}, {$mul: {a: 10}}); + exception({a: false}, {$mul: {a: 10}}); + exception({a: null}, {$mul: {a: 10}}); + exception({}, {$mul: {_id: 1}}); + modify({a: [1, 2]}, {$mul: {'a.1': 2}}, {a: [2, 1]}); + modify({a: [1, 2]}, {$mul: {'a.1': 3}}, {a: [3, 2]}); + modify({a: [1, 2]}, {$mul: {'a.2': 10}}, {a: [1, 20]}); + modify({a: [1, 2]}, {$mul: {'a.3': 10}}, {a: [1, 2, 0]}); + modify({a: {b: 2}}, {$mul: {'a.b': 1}}, {a: {b: 2}}); + modify({a: {b: 2}}, {$mul: {'a.c': 10}}, {a: {b: 2, c: 0}}); + // $max modify({a: 1, b: 2}, {$max: {b: 1}}, {a: 1, b: 2}); modify({a: 1, b: 2}, {$max: {b: 3}}, {a: 1, b: 3}); diff --git a/packages/minimongo/minimongo_tests_server.js b/packages/minimongo/minimongo_tests_server.js index eccb8a980a..596eff0781 100644 --- a/packages/minimongo/minimongo_tests_server.js +++ b/packages/minimongo/minimongo_tests_server.js @@ -35,8 +35,8 @@ Tinytest.add('minimongo - modifier affects selector', test => { // When top-level value is an object, it is treated as a literal, // so when you query col.find({ a: { foo: 1, bar: 2 } }) // it doesn't mean you are looking for anything that has 'a.foo' to be 1 and - // 'a.bar' to be 2, instead you are looking for 'a' to be exatly that object - // with exatly that order of keys. { a: { foo: 1, bar: 2, baz: 3 } } wouldn't + // 'a.bar' to be 2, instead you are looking for 'a' to be exactly that object + // with exactly that order of keys. { a: { foo: 1, bar: 2, baz: 3 } } wouldn't // match it. That's why in this selector 'a' would be important key, not a.foo // and a.bar. testSelectorPaths({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 826e59b3b4..c5e07aecbe 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.6.1' + version: '1.6.2' }); Package.onUse(api => { diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index f17d455a6e..99f68f035e 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -325,6 +325,7 @@ Object.assign(Mongo.Collection.prototype, { * @param {Number} options.pollingThrottleMs (Server only) When oplog is disabled (through the use of `disableOplog` or when otherwise not available), the minimum time (in milliseconds) to allow between re-polling when observing on the server. Increasing this will save CPU and mongo load at the expense of slower updates to users. Decreasing this is not recommended. Defaults to 50ms. * @param {Number} options.maxTimeMs (Server only) If set, instructs MongoDB to set a time limit for this cursor's operations. If the operation reaches the specified time limit (in milliseconds) without the having been completed, an exception will be thrown. Useful to prevent an (accidental or malicious) unoptimized query from causing a full collection scan that would disrupt other database users, at the expense of needing to handle the resulting error. * @param {String|Object} options.hint (Server only) Overrides MongoDB's default index selection and query optimization process. Specify an index to force its use, either by its name or index specification. You can also specify `{ $natural : 1 }` to force a forwards collection scan, or `{ $natural : -1 }` for a reverse collection scan. Setting this is only recommended for advanced users. + * @param {String} options.readPreference (Server only) Specifies a custom MongoDB [`readPreference`](https://docs.mongodb.com/manual/core/read-preference) for this particular cursor. Possible values are `primary`, `primaryPreferred`, `secondary`, `secondaryPreferred` and `nearest`. * @returns {Mongo.Cursor} */ find(...args) { @@ -350,6 +351,7 @@ Object.assign(Mongo.Collection.prototype, { * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. * @param {Boolean} options.reactive (Client only) Default true; pass false to disable reactivity * @param {Function} options.transform Overrides `transform` on the [`Collection`](#collections) for this cursor. Pass `null` to disable transformation. + * @param {String} options.readPreference (Server only) Specifies a custom MongoDB [`readPreference`](https://docs.mongodb.com/manual/core/read-preference) for fetching the document. Possible values are `primary`, `primaryPreferred`, `secondary`, `secondaryPreferred` and `nearest`. * @returns {Object} */ findOne(...args) { diff --git a/packages/mongo/collection_tests.js b/packages/mongo/collection_tests.js index 50b0e1caa1..ea17630507 100644 --- a/packages/mongo/collection_tests.js +++ b/packages/mongo/collection_tests.js @@ -153,3 +153,50 @@ Tinytest.addAsync('collection - calling native find with good hint and maxTimeMs }).catch(error => test.fail(error.message)); } ); + +Tinytest.add('collection - calling find with a valid readPreference', + function(test) { + if (Meteor.isServer) { + const defaultReadPreference = 'primary'; + const customReadPreference = 'secondaryPreferred'; + const collection = new Mongo.Collection('readPreferenceTest1'); + const defaultCursor = collection.find(); + const customCursor = collection.find( + {}, + { readPreference: customReadPreference } + ); + + // Trigger the creation of _synchronousCursor + defaultCursor.count(); + customCursor.count(); + + test.equal( + defaultCursor._synchronousCursor._dbCursor.operation.readPreference + .mode, + defaultReadPreference + ); + test.equal( + customCursor._synchronousCursor._dbCursor.operation.readPreference.mode, + customReadPreference + ); + } + } +); + +Tinytest.add('collection - calling find with an invalid readPreference', + function(test) { + if (Meteor.isServer) { + const invalidReadPreference = 'INVALID'; + const collection = new Mongo.Collection('readPreferenceTest2'); + const cursor = collection.find( + {}, + { readPreference: invalidReadPreference } + ); + + test.throws(function() { + // Trigger the creation of _synchronousCursor + cursor.count(); + }, `Invalid read preference mode ${invalidReadPreference}`); + } + } +); \ No newline at end of file diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index feb9a14bfa..ca6df4897d 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -146,9 +146,11 @@ MongoConnection = function (url, options) { var mongoOptions = Object.assign({ ignoreUndefined: true, - // See https://github.com/meteor/meteor/issues/10925 for discussion of - // why this option is not the default. - useUnifiedTopology: !!options.useUnifiedTopology, + // (node:59240) [MONGODB DRIVER] Warning: Current Server Discovery and + // Monitoring engine is deprecated, and will be removed in a future version. + // To use the new Server Discover and Monitoring engine, pass option + // { useUnifiedTopology: true } to the MongoClient constructor. + useUnifiedTopology: true, }, userOptions); // The autoReconnect and reconnectTries options are incompatible with @@ -990,7 +992,8 @@ MongoConnection.prototype._createSynchronousCursor = function( sort: cursorOptions.sort, limit: cursorOptions.limit, skip: cursorOptions.skip, - projection: cursorOptions.fields + projection: cursorOptions.fields, + readPreference: cursorOptions.readPreference }; // Do we want a tailable cursor (which only works on capped collections)? diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 26729521af..8be1541d3f 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.10.1' + version: '1.11.0' }); Npm.depends({ diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index cb91a9ef22..0e37721b14 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -7,9 +7,9 @@ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==" }, "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" }, "core-util-is": { "version": "1.0.2", @@ -17,9 +17,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "denque": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", - "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" }, "inherits": { "version": "2.0.4", @@ -37,9 +37,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz", - "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==" + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.6.tgz", + "integrity": "sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w==" + }, + "optional-require": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", + "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" }, "process-nextick-args": { "version": "2.0.1", @@ -58,16 +63,6 @@ } } }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==" - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -78,11 +73,6 @@ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==" }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 4b88f4acf0..cf7ae2e01d 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: "3.8.1", + version: "3.9.0", documentation: null }); Npm.depends({ - mongodb: "3.6.2" + mongodb: "3.6.6" }); Package.onUse(function (api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index a646b2bc07..09c5c9d427 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "typescript", - version: "4.1.2", + version: "4.2.2", summary: "Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files", documentation: "README.md" }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 95733da468..25a34976d8 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.10.0' + version: '1.10.1' }); Npm.depends({"basic-auth-connect": "1.0.0", @@ -21,7 +21,6 @@ Npm.strip({ Cordova.depends({ 'cordova-plugin-whitelist': '1.3.4', - 'cordova-plugin-wkwebview-engine': '1.2.1', 'cordova-plugin-meteor-webapp': '1.9.1' }); diff --git a/packages/webapp/webapp_server.js b/packages/webapp/webapp_server.js index 96f08b34c3..805c795e26 100644 --- a/packages/webapp/webapp_server.js +++ b/packages/webapp/webapp_server.js @@ -20,6 +20,7 @@ import { removeExistingSocketFile, registerSocketFileCleanup, } from './socket_file.js'; +import cluster from "cluster"; var SHORT_SOCKET_TIMEOUT = 5*1000; var LONG_SOCKET_TIMEOUT = 120*1000; @@ -1155,9 +1156,13 @@ function runWebAppServer() { }; let localPort = process.env.PORT || 0; - const unixSocketPath = process.env.UNIX_SOCKET_PATH; + let unixSocketPath = process.env.UNIX_SOCKET_PATH; if (unixSocketPath) { + if (cluster.isWorker) { + const workerName = cluster.worker.process.env.name || cluster.worker.id + unixSocketPath += "." + workerName + ".sock"; + } // Start the HTTP server using a socket file. removeExistingSocketFile(unixSocketPath); startHttpServer({ path: unixSocketPath }); diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 72f87b40b8..eb8577cf68 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.0-rc.3", + "version": "2.2", "recommended": false, "official": false, "description": "Meteor" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 9e5c960c28..77c2956d10 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.1", + "version": "2.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index 8fad863eec..6d51ed7d90 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,10 +5,10 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=12.21.0 -MONGO_VERSION_64BIT=4.2.8 +NODE_VERSION=12.22.1 +MONGO_VERSION_64BIT=4.4.4 MONGO_VERSION_32BIT=3.2.22 -NPM_VERSION=6.14.8 +NPM_VERSION=6.14.12 # If we built Node from source on Jenkins, this is the build number. NODE_BUILD_NUMBER= diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 9fc999a7d4..45c1d4fc82 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -10,12 +10,12 @@ var packageJson = { dependencies: { // Explicit dependency because we are replacing it with a bundled version // and we want to make sure there are no dependencies on a higher version - npm: "6.14.8", + npm: "6.14.12", pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "6.0.1", "node-pre-gyp": "0.14.0", - typescript: "4.1.2", - "meteor-babel": "7.10.6", + typescript: "4.2.2", + "meteor-babel": "7.10.7", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.8.7", diff --git a/scripts/generate-dev-bundle.ps1 b/scripts/generate-dev-bundle.ps1 index bd799c545f..b337eb20cf 100644 --- a/scripts/generate-dev-bundle.ps1 +++ b/scripts/generate-dev-bundle.ps1 @@ -224,7 +224,12 @@ Function Add-Mongo { # Mongo >= 3.4 no longer supports 32-bit (x86) architectures, so we package # the latest 3.2 version of Mongo for those builds and >= 3.4 for x64. $mongo_filenames = @{ - windows_x64 = "mongodb-win32-x86_64-2012plus-${MONGO_VERSION_64BIT}" + windows_x64 = "mongodb-windows-x86_64-${MONGO_VERSION_64BIT}" + } + + # the folder inside the zip still uses win32 + $mongo_zip_filenames = @{ + windows_x64 = "mongodb-win32-x86_64-windows-${MONGO_VERSION_64BIT}" } $previousCwd = $PWD @@ -232,9 +237,9 @@ Function Add-Mongo { cd "$DIR" mkdir "$DIR\mongodb" mkdir "$DIR\mongodb\bin" - $mongo_name = $mongo_filenames.Item($PLATFORM) - $mongo_link = "https://fastdl.mongodb.org/win32/${mongo_name}.zip" + $mongo_zip_name = $mongo_zip_filenames.Item($PLATFORM) + $mongo_link = "https://fastdl.mongodb.org/windows/${mongo_name}.zip" $mongo_zip = "$DIR\mongodb\mongo.zip" Write-Host "Downloading Mongo from ${mongo_link}..." -ForegroundColor Magenta @@ -247,26 +252,14 @@ Function Add-Mongo { } Write-Host "Putting MongoDB mongod.exe in mongodb\bin" -ForegroundColor Magenta - cp "$DIR\mongodb\$mongo_name\bin\mongod.exe" $DIR\mongodb\bin + cp "$DIR\mongodb\$mongo_zip_name\bin\mongod.exe" $DIR\mongodb\bin Write-Host "Putting MongoDB mongo.exe in mongodb\bin" -ForegroundColor Magenta - cp "$DIR\mongodb\$mongo_name\bin\mongo.exe" $DIR\mongodb\bin - - # https://jira.mongodb.org/browse/SERVER-19086 - $libeay32dll = "$DIR\mongodb\$mongo_name\bin\libeay32.dll" - if (Test-Path $libeay32dll) { - Write-Host "Putting MongoDB libeay32.dll in mongodb\bin" -ForegroundColor Magenta - cp $libeay32dll $DIR\mongodb\bin - } - $ssleay32dll = "$DIR\mongodb\$mongo_name\bin\ssleay32.dll" - if (Test-Path $ssleay32dll) { - Write-Host "Putting MongoDB ssleay32.dll in mongodb\bin" -ForegroundColor Magenta - cp $ssleay32dll $DIR\mongodb\bin - } + cp "$DIR\mongodb\$mongo_zip_name\bin\mongo.exe" $DIR\mongodb\bin Write-Host "Removing the old Mongo zip..." -ForegroundColor Magenta rm -Recurse -Force $mongo_zip Write-Host "Removing the old Mongo directory..." -ForegroundColor Magenta - rm -Recurse -Force "$DIR\mongodb\$mongo_name" + rm -Recurse -Force "$DIR\mongodb\$mongo_zip_name" cd "$previousCwd" } diff --git a/tools/cli/commands-packages-query.js b/tools/cli/commands-packages-query.js index 2e68a79d76..9c5a5213f1 100644 --- a/tools/cli/commands-packages-query.js +++ b/tools/cli/commands-packages-query.js @@ -762,6 +762,8 @@ _.extend(PackageQuery.prototype, { // - exports: a PkgExports object, representing package exports. // - exports: a PkgImplies object, representing package implies. // - dependencies: a PkgDependencies object, representing dependencies. + // - deprecated: If the package has been deprecated or not. + // - deprecatedMessage: Optional message from the deprecated package for the users. _displayVersion: function (data) { var self = this; Console.info( @@ -823,6 +825,16 @@ _.extend(PackageQuery.prototype, { Console.command("'meteor show " + data.name + "@" + data.version + "'"), "from outside the project."); } + + // Display deprecation message + if (data.deprecated) { + Console.info(); + if (data.deprecatedMessage) { + Console.info(data.deprecatedMessage); + } else { + Console.info('This packages has been DEPRECATED.'); + } + } }, // Returns a user-friendly object from this PackageQuery to the caller. Takes // in a data object with the same keys as _displayVersion. @@ -1124,7 +1136,7 @@ _.extend(ReleaseQuery.prototype, { recommended: versionRecord.recommended, orderKey: versionRecord.orderKey, publishedBy: versionRecord.publishedBy["username"], - pubishedOn: publishDate, + publishedOn: publishDate, packages: versionRecord.packages, tool: versionRecord.tool }; diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 5ae2ad2b81..a83a142dd8 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -1953,6 +1953,7 @@ main.registerCommand({ var nonlatestDirectDeps = []; var nonlatestIndirectDeps = []; + var deprecatedDeps = []; projectContext.packageMap.eachPackage(function (name, info) { var selectedVersion = info.version; var catalog = projectContext.projectCatalog; @@ -1966,6 +1967,13 @@ main.registerCommand({ nonlatestIndirectDeps.push(rec); } } + if (info.packageSource && info.packageSource.deprecated) { + deprecatedDeps.push({ + name: name, + selectedVersion: selectedVersion, + deprecatedMessage: info.packageSource.deprecatedMessage + }) + } }); var printItem = function (rec) { Console.info(" * " + rec.name + " " + rec.selectedVersion + @@ -1974,12 +1982,18 @@ main.registerCommand({ if (nonlatestDirectDeps.length) { Console.info("\nThe following top-level dependencies were not updated " + "to the very latest version available:"); - _.each(nonlatestDirectDeps, printItem); + nonlatestDirectDeps.forEach(printItem); + } + if(deprecatedDeps.length) { + Console.info("\nThe following packages have been DEPRECATED. Please consider finding replacements for them."); + deprecatedDeps.forEach(function (item) { + Console.info(" * " + item.name + " " + item.selectedVersion + " " + (item.deprecatedMessage ? "(" + item.deprecatedMessage + ")" : "")); + }) } if (nonlatestIndirectDeps.length) { Console.info("\nNewer versions of the following indirect dependencies" + " are available:"); - _.each(nonlatestIndirectDeps, printItem); + nonlatestIndirectDeps.forEach(printItem); Console.info([ "These versions may not be compatible with your project.", "To update one or more of these packages to their latest", diff --git a/tools/cli/commands.js b/tools/cli/commands.js index c5537997d4..dc794b53c9 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -514,7 +514,8 @@ const AVAILABLE_SKELETONS = [ "minimal", DEFAULT_SKELETON, "typescript", - "vue" + "vue", + "svelte" ]; main.registerCommand({ @@ -532,6 +533,7 @@ main.registerCommand({ vue: { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, + svelte: { type: Boolean }, }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -901,6 +903,7 @@ main.registerCommand({ 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 --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"); cmd("meteor create --blaze # to create an app using Blaze"); } diff --git a/tools/cli/help.txt b/tools/cli/help.txt index fab5ddd333..0bc633c589 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|--blaze] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -185,6 +185,7 @@ Options: --react Create a basic react-based app, same as default. --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. --blaze Create a basic blaze-based app. diff --git a/tools/console/console.js b/tools/console/console.js index c7383f785f..7907c7ef40 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -782,7 +782,7 @@ class Console extends ConsoleBase { } var message = this._format(args); - process.stdout.write( '\n*** simpleDebug ***\n' + message + '\n*** end simpleDebug ***\n'); + process.stdout.write( '\n' + message + '\n'); } // By default, Console.debug automatically line wraps the output. @@ -1086,7 +1086,7 @@ class Console extends ConsoleBase { // level with Console.LEVEL_INFO, Console.LEVEL_ERROR, etc. // - ignoreWidth: ignore the width of the terminal, and go over the // character limit instead of trailing off with '...'. Useful for - // printing directories, for examle. + // printing directories, for example. // - indent: indent the entire table by a given number of spaces. printTwoColumns(rows, options) { options = options || Object.create(null); diff --git a/tools/cordova/index.js b/tools/cordova/index.js index f7ce8abddc..c1ef1bd521 100644 --- a/tools/cordova/index.js +++ b/tools/cordova/index.js @@ -14,14 +14,15 @@ export const CORDOVA_ARCH = "web.cordova"; export const CORDOVA_PLATFORMS = ['ios', 'android']; export const CORDOVA_DEV_BUNDLE_VERSIONS = { - 'cordova-lib': '9.0.1', - 'cordova-common': '3.2.1', + 'cordova-lib': '10.0.0', + 'cordova-common': '4.0.2', + 'cordova-create': '2.0.0', 'cordova-registry-mapper': '1.1.15', }; export const CORDOVA_PLATFORM_VERSIONS = { - 'android': '8.1.0', - 'ios': '5.1.1', + 'android': '9.0.0', + 'ios': '6.2.0', }; export const SWIFT_VERSION = 5; diff --git a/tools/cordova/project.js b/tools/cordova/project.js index d224e2f56d..8ff4890818 100644 --- a/tools/cordova/project.js +++ b/tools/cordova/project.js @@ -14,6 +14,7 @@ import { execFileSync } from '../utils/processes'; import { cordova as cordova_lib, events as cordova_events, CordovaError } from 'cordova-lib'; +import create from "cordova-create"; import cordova_util from 'cordova-lib/src/cordova/util.js'; import PluginInfoProvider from 'cordova-common/src/PluginInfo/PluginInfoProvider.js'; @@ -71,7 +72,6 @@ const pinnedPluginVersions = { "cordova-plugin-test-framework": "1.1.5", "cordova-plugin-vibration": "2.1.5", "cordova-plugin-whitelist": "1.3.2", - "cordova-plugin-wkwebview-engine": "1.1.3" } /** @@ -207,7 +207,7 @@ outdated platforms`); this.runCommands('creating Cordova project', async () => { // No need to pass in appName and appId because these are set from // the generated config.xml - await cordova_lib.create(files.convertToOSPath(this.projectRoot), + await create(files.convertToOSPath(this.projectRoot), undefined, undefined, config); }, undefined, null); } diff --git a/tools/isobuild/isopack.js b/tools/isobuild/isopack.js index 696ff87154..81ea62b731 100644 --- a/tools/isobuild/isopack.js +++ b/tools/isobuild/isopack.js @@ -1,4 +1,3 @@ -var assert = require('assert'); var compiler = require('./compiler.js'); var archinfo = require('../utils/archinfo'); var _ = require('underscore'); diff --git a/tools/isobuild/package-namespace.js b/tools/isobuild/package-namespace.js index e37e61838f..8128a1ec02 100644 --- a/tools/isobuild/package-namespace.js +++ b/tools/isobuild/package-namespace.js @@ -53,6 +53,8 @@ export class PackageNamespace { * will ONLY be bundled into production builds. * @param {Boolean} options.testOnly A package with this flag set to true * will ONLY be bundled as part of `meteor test`. + * @param {Boolean|String} options.deprecated A flag that will mark the + * package as deprecated. Provide string to override the default message. */ describe(options) { const source = this._packageSource; @@ -128,7 +130,7 @@ export class PackageNamespace { // * These flags CAN cause different package load orders in // development and production! We should probably fix this. // Basically, packages that are excluded from the build using - // these flags are also excluded fro the build order calculation, + // these flags are also excluded from the build order calculation, // and that's the problem // // * We should consider publicly documenting these flags, since they @@ -139,6 +141,11 @@ export class PackageNamespace { source.prodOnly = !!value; } else if (key === "testOnly") { source.testOnly = !!value; + } else if (key === "deprecated") { + if (typeof(value) === "string") { + source.deprecatedMessage = value; + } + source.deprecated = !!value; } else { // Do nothing. We might want to add some keys later, and we should err // on the side of backwards compatibility. diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index 8c9864118b..f9b8ca674f 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -74,7 +74,7 @@ var loadOrderSort = function (sourceProcessorSet, arch) { return false; default: - throw Error(`surprising type ${classification.type} for ${filename}`); + throw Error(`Surprising type ${classification.type} for ${filename}`); } }); @@ -379,6 +379,11 @@ var PackageSource = function () { // specify the correct restrictions at 0.90. // XXX: 0.90 package versions. self.isCore = false; + + // Flags for Atmosphere and developers to mark if deprecated packages + // and provide additional info. + self.deprecated = false; + self.deprecatedMessage = undefined; }; diff --git a/tools/packaging/catalog/catalog-local.js b/tools/packaging/catalog/catalog-local.js index 3368108aa1..1b22227283 100644 --- a/tools/packaging/catalog/catalog-local.js +++ b/tools/packaging/catalog/catalog-local.js @@ -389,6 +389,10 @@ _.extend(LocalCatalog.prototype, { debugOnly: packageSource.debugOnly, prodOnly: packageSource.prodOnly, testOnly: packageSource.testOnly, + + deprecated: packageSource.deprecated, + deprecatedMessage: packageSource.deprecatedMessage, + containsPlugins: packageSource.containsPlugins() } }; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 17f9d3a9d6..b62f94526d 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -792,6 +792,10 @@ exports.publishPackage = function (options) { debugOnly: packageSource.debugOnly, prodOnly: packageSource.prodOnly, testOnly: packageSource.testOnly, + + deprecated: packageSource.deprecated, + deprecatedMessage: packageSource.deprecatedMessage, + exports: packageSource.getExports(), releaseName: release.current.name, dependencies: packageDeps diff --git a/tools/packaging/package-map.js b/tools/packaging/package-map.js index a5b3f51fff..9fc8000b6e 100644 --- a/tools/packaging/package-map.js +++ b/tools/packaging/package-map.js @@ -267,6 +267,14 @@ _.extend(exports.PackageMapDelta.prototype, { description = "downgraded from " + info.oldVersion + " to " + info.newVersion; } + + if (info.deprecated) { + name += ' - DEPRECATED'; + if (info.deprecatedMessage) { + description += ' - ' + info.deprecatedMessage; + } + } + displayItems.push({ name: name, description: description }); }); diff --git a/tools/runners/run-mongo.js b/tools/runners/run-mongo.js index aa5b19abe9..2f5a1ba8ce 100644 --- a/tools/runners/run-mongo.js +++ b/tools/runners/run-mongo.js @@ -570,13 +570,23 @@ var launchMongo = function (options) { var stdoutOnData = fiberHelpers.bindEnvironment(function (data) { // note: don't use "else ifs" in this, because 'data' can have multiple // lines - if (/\[initandlisten\] Did not find local replica set configuration document at startup/.test(data) || - /\[.*\] Locally stored replica set configuration does not have a valid entry for the current node/.test(data)) { + if ( + /replica set config in use/.test(data) || + /Did not find local replica set configuration document at startup/.test( + data + ) || + /\[.*\] Locally stored replica set configuration does not have a valid entry for the current node/.test( + data + ) + ) { replSetReadyToBeInitiated = true; maybeReadyToTalk(); } - if (/ \[.*\] waiting for connections on port/.test(data)) { + if ( + /Waiting for connections/.test(data) || + / \[.*\] waiting for connections on port/.test(data) + ) { listening = true; maybeReadyToTalk(); } diff --git a/tools/static-assets/server/boot.js b/tools/static-assets/server/boot.js index 6e78d35170..994c6dcb28 100644 --- a/tools/static-assets/server/boot.js +++ b/tools/static-assets/server/boot.js @@ -360,12 +360,12 @@ var loadServerBundles = Profile("Load server bundles", function () { // Unicode normalize the asset path to prevent string mismatches when // using this string elsewhere. assetPath = files.unicodeNormalizePath(assetPath); + assetPath = files.convertToStandardPath(assetPath); if (! fileInfo.assets || ! hasOwn.call(fileInfo.assets, assetPath)) { throw new Error("Unknown asset: " + assetPath); } - assetPath = files.convertToStandardPath(assetPath); var filePath = path.join(serverDir, fileInfo.assets[assetPath]); return files.convertToOSPath(filePath); }, diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index c7d0ab6546..c2506a81ed 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -21,3 +21,6 @@ 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) + +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-svelte/.gitignore b/tools/static-assets/skel-svelte/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-svelte/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/static-assets/skel-svelte/.meteor/.gitignore b/tools/static-assets/skel-svelte/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/static-assets/skel-svelte/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages new file mode 100644 index 0000000000..8931fa7b4c --- /dev/null +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -0,0 +1,23 @@ +# 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 + +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 +svelte:compiler # 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 \ No newline at end of file diff --git a/tools/static-assets/skel-svelte/.meteor/platforms b/tools/static-assets/skel-svelte/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-svelte/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-svelte/client/main.css b/tools/static-assets/skel-svelte/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/static-assets/skel-svelte/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/static-assets/skel-svelte/client/main.html b/tools/static-assets/skel-svelte/client/main.html new file mode 100644 index 0000000000..e0e3fddd46 --- /dev/null +++ b/tools/static-assets/skel-svelte/client/main.html @@ -0,0 +1,8 @@ + + ~name~ + + + +
+ + diff --git a/tools/static-assets/skel-svelte/client/main.js b/tools/static-assets/skel-svelte/client/main.js new file mode 100644 index 0000000000..376cf55474 --- /dev/null +++ b/tools/static-assets/skel-svelte/client/main.js @@ -0,0 +1,9 @@ +import { Meteor } from 'meteor/meteor'; +import App from '../imports/ui/App.svelte'; + + +Meteor.startup(() => { + new App({ + target: document.getElementById('app') + }); +}); \ No newline at end of file diff --git a/tools/static-assets/skel-svelte/imports/ui/App.svelte b/tools/static-assets/skel-svelte/imports/ui/App.svelte new file mode 100644 index 0000000000..7efa602339 --- /dev/null +++ b/tools/static-assets/skel-svelte/imports/ui/App.svelte @@ -0,0 +1,22 @@ + + + +
+

Welcome to Meteor!

+ + +

You've pressed the button {counter} times.

+ +

Learn Meteor!

+ +
diff --git a/tools/static-assets/skel-svelte/package.json b/tools/static-assets/skel-svelte/package.json new file mode 100644 index 0000000000..cc14de7857 --- /dev/null +++ b/tools/static-assets/skel-svelte/package.json @@ -0,0 +1,22 @@ +{ + "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.11.2", + "meteor-node-stubs": "^1.0.1", + "svelte": "^3.37.0" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/static-assets/skel-svelte/server/main.js b/tools/static-assets/skel-svelte/server/main.js new file mode 100644 index 0000000000..31a9e0e2d6 --- /dev/null +++ b/tools/static-assets/skel-svelte/server/main.js @@ -0,0 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + +Meteor.startup(() => { + // code to run on server at startup +}); diff --git a/tools/static-assets/skel-svelte/tests/main.js b/tools/static-assets/skel-svelte/tests/main.js new file mode 100644 index 0000000000..ea7a8da1e1 --- /dev/null +++ b/tools/static-assets/skel-svelte/tests/main.js @@ -0,0 +1,20 @@ +import assert from "assert"; + +describe("~name~", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "~name~"); + }); + + 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-typescript/package.json b/tools/static-assets/skel-typescript/package.json index 976e5c8d12..4a4de79869 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.0.3", "@types/react": "^16.9.49", "@types/react-dom": "^16.9.8", - "typescript": "^4.0.2" + "typescript": "^4.2.2" }, "meteor": { "mainModule": { diff --git a/tools/tests/create.js b/tools/tests/create.js index 254b1e7c30..984e3c0234 100644 --- a/tools/tests/create.js +++ b/tools/tests/create.js @@ -1,7 +1,6 @@ var selftest = require('../tool-testing/selftest.js'); var Sandbox = selftest.Sandbox; const SIMPLE_WAREHOUSE = { v1: { recommended: true } }; -import { Console } from '../console/console.js'; selftest.define("create main", function () { // We need a warehouse so the tool doesn't think we are running from checkout diff --git a/tools/tool-testing/clients/browserstack/index.js b/tools/tool-testing/clients/browserstack/index.js index ff48c933c6..2a05f63793 100644 --- a/tools/tool-testing/clients/browserstack/index.js +++ b/tools/tool-testing/clients/browserstack/index.js @@ -74,7 +74,7 @@ export default class BrowserStackClient extends Client { 'browserstack.key': key, // Use the BrowserStackLocal tunnel, to allow BrowserStack to - // tunnel to the machine this server is runninng on. + // tunnel to the machine this server is running on. 'browserstack.local': true, // Enabled the capturing of "Visual Logs" (i.e. Screenshots). diff --git a/tools/tool-testing/matcher.js b/tools/tool-testing/matcher.js index bac1d1e0cc..e97859ba45 100644 --- a/tools/tool-testing/matcher.js +++ b/tools/tool-testing/matcher.js @@ -22,6 +22,10 @@ export default class Matcher { this._tryMatch(); } + getFullBuffer() { + return this.fullBuffer; + } + resetMatch() { const mp = this.matchPromise; @@ -137,8 +141,6 @@ export default class Matcher { let ret = null; - Console.simpleDebug(`fullBuffer`, this.fullBuffer); - if (this.matchFullBuffer) { // Note: this.matchStrict is ignored if this.matchFullBuffer truthy. if (this.matchPattern instanceof RegExp) { diff --git a/tools/tool-testing/run.js b/tools/tool-testing/run.js index 69a61d8023..69c328adf1 100644 --- a/tools/tool-testing/run.js +++ b/tools/tool-testing/run.js @@ -190,6 +190,10 @@ export default class Run { return this.stdoutMatcher.match(pattern, timeout, _strict); } + getMatcherFullBuffer() { + return this.stdoutMatcher.getFullBuffer(); + } + // As expect(), but for stderr instead of stdout. matchErr(pattern, _strict) { this._ensureStarted(); @@ -204,7 +208,6 @@ export default class Run { // Like match(), but won't skip ahead looking for a match. It must // follow immediately after the last thing we matched or read. read(pattern, strict = true) { - Console.simpleDebug('read', pattern); return this.match(pattern, strict); } diff --git a/tools/tool-testing/sandbox.js b/tools/tool-testing/sandbox.js index b036cb09b9..765db2d2e4 100644 --- a/tools/tool-testing/sandbox.js +++ b/tools/tool-testing/sandbox.js @@ -561,6 +561,8 @@ const ROOT_PACKAGES_TO_BUILD_IN_SANDBOX = [ 'mobile-experience', 'mongo', 'blaze-html-templates', + 'blaze-hot', + 'hot-module-replacement', "jquery", // necessary when using Blaze 'session', 'tracker',