From 03b776933bbcebf3f63d856585ad2a01c0163429 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 4 Sep 2022 17:02:17 +0200 Subject: [PATCH 001/292] Start moving OAuth stuff out of accounts-base --- packages/accounts-base/accounts_common.js | 34 -------- packages/accounts-base/accounts_server.js | 94 ---------------------- packages/accounts-base/package.js | 4 - packages/accounts-oauth/oauth_common.js | 36 +++++++++ packages/accounts-oauth/oauth_server.js | 96 +++++++++++++++++++++++ packages/accounts-oauth/package.js | 5 ++ 6 files changed, 137 insertions(+), 132 deletions(-) diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..01af031e48 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,40 +79,6 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; - - // loginServiceConfiguration and ConfigError are maintained for backwards compatibility - Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - this.loginServiceConfiguration = ServiceConfiguration.configurations; - this.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - if (!VALID_CONFIG_KEYS.includes(key)) { - // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? - throw new Meteor.Error( - `Accounts configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - this._options[key] = settings[key]; - } - }); - } - }); } /** diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 9088bbbea9..7e8d18ee86 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -76,9 +76,6 @@ export class AccountsServer extends AccountsCommon { setExpireTokensInterval(this); this._validateLoginHook = new Hook({ bindEnvironment: false }); - this._validateNewUserHooks = [ - defaultValidateNewUserHook.bind(this) - ]; this._deleteSavedTokensForAllUsersOnStartup(); @@ -1684,66 +1681,6 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); -}; - -// OAuth service data is temporarily stored in the pending credentials -// collection during the oauth authentication process. Sensitive data -// such as access tokens are encrypted without the user id because -// we don't know the user id yet. We re-encrypt these fields with the -// user id included when storing the service data permanently in -// the users collection. -// -const pinEncryptedFieldsToUser = (serviceData, userId) => { - Object.keys(serviceData).forEach(key => { - let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) - value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); - serviceData[key] = value; - }); -}; - - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); - // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { @@ -1752,37 +1689,6 @@ const defaultCreateUserHook = (options, user) => { return user; }; -// Validate new user's email or Google/Facebook/GitHub account's email -function defaultValidateNewUserHook(user) { - const domain = this._options.restrictCreationByEmailDomain; - if (!domain) { - return true; - } - - let emailIsGood = false; - if (user.emails && user.emails.length > 0) { - emailIsGood = user.emails.reduce( - (prev, email) => prev || this._testEmailDomain(email.address), false - ); - } else if (user.services && Object.values(user.services).length > 0) { - // Find any email of any service and check it - emailIsGood = Object.values(user.services).reduce( - (prev, service) => service.email && this._testEmailDomain(service.email), - false, - ); - } - - if (emailIsGood) { - return true; - } - - if (typeof domain === 'string') { - throw new Meteor.Error(403, `@${domain} email required`); - } else { - throw new Meteor.Error(403, "Email doesn't match the criteria."); - } -} - const setupUsersCollection = users => { /// /// RESTRICTING WRITES TO USER OBJECTS diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 32a6df946c..c6e303c499 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -15,10 +15,6 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index e0e1a1ad48..734570ecd8 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + Accounts.oauth = {}; const services = {}; @@ -31,3 +33,37 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); + +// loginServiceConfiguration and ConfigError are maintained for backwards compatibility +Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; + Accounts.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + if (!VALID_CONFIG_KEYS.includes(key)) { + // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? + throw new Meteor.Error( + `Accounts configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + Accounts._options[key] = settings[key]; + } + }); + } +}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index c76b2e439b..cbf4909be4 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -55,3 +57,97 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); + +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = + Package["oauth-encryption"] && + Package["oauth-encryption"].OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption && OAuthEncryption.keyIsLoaded(); +}; + +// OAuth service data is temporarily stored in the pending credentials +// collection during the oauth authentication process. Sensitive data +// such as access tokens are encrypted without the user id because +// we don't know the user id yet. We re-encrypt these fields with the +// user id included when storing the service data permanently in +// the users collection. +// +const pinEncryptedFieldsToUser = (serviceData, userId) => { + Object.keys(serviceData).forEach(key => { + let value = serviceData[key]; + if (OAuthEncryption && OAuthEncryption.isSealed(value)) + value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); + serviceData[key] = value; + }); +}; + +// Validate new user's email or Google/Facebook/GitHub account's email +function defaultValidateNewUserHook(user) { + const domain = this._options.restrictCreationByEmailDomain; + if (!domain) { + return true; + } + + let emailIsGood = false; + if (user.emails && user.emails.length > 0) { + emailIsGood = user.emails.reduce( + (prev, email) => prev || this._testEmailDomain(email.address), false + ); + } else if (user.services && Object.values(user.services).length > 0) { + // Find any email of any service and check it + emailIsGood = Object.values(user.services).reduce( + (prev, service) => service.email && this._testEmailDomain(service.email), + false, + ); + } + + if (emailIsGood) { + return true; + } + + if (typeof domain === 'string') { + throw new Meteor.Error(403, `@${domain} email required`); + } else { + throw new Meteor.Error(403, "Email doesn't match the criteria."); + } +} + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + Accounts._validateNewUserHooks = [ + defaultValidateNewUserHook.bind(this) + ]; + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f20513769d..f346b8a1e4 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -9,6 +9,11 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); + + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + api.use('oauth'); api.addFiles('oauth_common.js'); From f5033ac5fa3f7afb2b732a2ea34a024b6f1fb645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 17:46:28 +0200 Subject: [PATCH 002/292] Add types for accounts-base package --- packages/accounts-base/accounts-base.d.ts | 326 ++++++++++++++++++++++ packages/accounts-base/package-types.json | 3 + packages/accounts-base/package.js | 2 + 3 files changed, 331 insertions(+) create mode 100644 packages/accounts-base/accounts-base.d.ts create mode 100644 packages/accounts-base/package-types.json diff --git a/packages/accounts-base/accounts-base.d.ts b/packages/accounts-base/accounts-base.d.ts new file mode 100644 index 0000000000..923625be79 --- /dev/null +++ b/packages/accounts-base/accounts-base.d.ts @@ -0,0 +1,326 @@ +import { Mongo } from 'meteor/mongo'; +import { Meteor } from 'meteor/meteor'; + +export interface URLS { + resetPassword: (token: string) => string; + verifyEmail: (token: string) => string; + enrollAccount: (token: string) => string; +} + +export interface EmailFields { + from?: ((user: Meteor.User) => string) | undefined; + subject?: ((user: Meteor.User) => string) | undefined; + text?: ((user: Meteor.User, url: string) => string) | undefined; + html?: ((user: Meteor.User, url: string) => string) | undefined; +} + +export namespace Accounts { + var urls: URLS; + + function user(options?: { + fields?: Mongo.FieldSpecifier | undefined; + }): Meteor.User | null; + + function userId(): string | null; + + function createUser( + options: { + username?: string | undefined; + email?: string | undefined; + password?: string | undefined; + profile?: Object | undefined; + }, + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): string; + + function config(options: { + sendVerificationEmail?: boolean | undefined; + forbidClientAccountCreation?: boolean | undefined; + restrictCreationByEmailDomain?: string | Function | undefined; + loginExpirationInDays?: number | undefined; + oauthSecretKey?: string | undefined; + passwordResetTokenExpirationInDays?: number | undefined; + passwordEnrollTokenExpirationInDays?: number | undefined; + ambiguousErrorMessages?: boolean | undefined; + defaultFieldSelector?: { [key: string]: 0 | 1 } | undefined; + }): void; + + function onLogin( + func: Function + ): { + stop: () => void; + }; + + function onLoginFailure( + func: Function + ): { + stop: () => void; + }; + + function loginServicesConfigured(): boolean; + + function onPageLoadLogin(func: Function): void; +} + +export namespace Accounts { + function changePassword( + oldPassword: string, + newPassword: string, + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function forgotPassword( + options: { email?: string | undefined }, + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function resetPassword( + token: string, + newPassword: string, + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function verifyEmail( + token: string, + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function onEmailVerificationLink(callback: Function): void; + + function onEnrollmentLink(callback: Function): void; + + function onResetPasswordLink(callback: Function): void; + + function loggingIn(): boolean; + + function loggingOut(): boolean; + + function logout( + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function logoutOtherClients( + callback?: (error?: Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + var ui: { + config(options: { + requestPermissions?: Object | undefined; + requestOfflineToken?: Object | undefined; + forceApprovalPrompt?: Object | undefined; + passwordSignupFields?: string | undefined; + }): void; + }; +} + +export interface Header { + [id: string]: string; +} + +export interface EmailTemplates { + from: string; + siteName: string; + headers?: Header | undefined; + resetPassword: EmailFields; + enrollAccount: EmailFields; + verifyEmail: EmailFields; +} + +export namespace Accounts { + var emailTemplates: EmailTemplates; + + function addEmail(userId: string, newEmail: string, verified?: boolean): void; + + function removeEmail(userId: string, email: string): void; + + function onCreateUser( + func: (options: { profile?: {} | undefined }, user: Meteor.User) => void + ): void; + + function findUserByEmail( + email: string, + options?: { fields?: Mongo.FieldSpecifier | undefined } + ): Meteor.User | null | undefined; + + function findUserByUsername( + username: string, + options?: { fields?: Mongo.FieldSpecifier | undefined } + ): Meteor.User | null | undefined; + + function sendEnrollmentEmail( + userId: string, + email?: string, + extraTokenData?: Record, + extraParams?: Record + ): void; + + function sendResetPasswordEmail( + userId: string, + email?: string, + extraTokenData?: Record, + extraParams?: Record + ): void; + + function sendVerificationEmail( + userId: string, + email?: string, + extraTokenData?: Record, + extraParams?: Record + ): void; + + function setUsername(userId: string, newUsername: string): void; + + function setPassword( + userId: string, + newPassword: string, + options?: { logout?: Object | undefined } + ): void; + + function validateNewUser(func: Function): boolean; + + function validateLoginAttempt( + func: Function + ): { + stop: () => void; + }; + + function _hashPassword( + password: string + ): { digest: string; algorithm: string }; + + interface IValidateLoginAttemptCbOpts { + type: string; + allowed: boolean; + error: Meteor.Error; + user: Meteor.User; + connection: Meteor.Connection; + methodName: string; + methodArguments: any[]; + } +} + +export namespace Accounts { + function onLogout(func: Function): void; +} + +export namespace Accounts { + function onLogout( + func: (options: { + user: Meteor.User; + connection: Meteor.Connection; + }) => void + ): void; +} + +export namespace Accounts { + interface LoginMethodOptions { + /** + * The method to call (default 'login') + */ + methodName?: string | undefined; + /** + * The arguments for the method + */ + methodArguments?: any[] | undefined; + /** + * If provided, will be called with the result of the + * method. If it throws, the client will not be logged in (and + * its error will be passed to the callback). + */ + validateResult?: Function | undefined; + /** + * Will be called with no arguments once the user is fully + * logged in, or with the error on error. + */ + userCallback?: ((err?: any) => void) | undefined; + } + + /** + * + * Call a login method on the server. + * + * A login method is a method which on success calls `this.setUserId(id)` and + * `Accounts._setLoginToken` on the server and returns an object with fields + * 'id' (containing the user id), 'token' (containing a resume token), and + * optionally `tokenExpires`. + * + * This function takes care of: + * - Updating the Meteor.loggingIn() reactive data source + * - Calling the method in 'wait' mode + * - On success, saving the resume token to localStorage + * - On success, calling Accounts.connection.setUserId() + * - Setting up an onReconnect handler which logs in with + * the resume token + * + * Options: + * - methodName: The method to call (default 'login') + * - methodArguments: The arguments for the method + * - validateResult: If provided, will be called with the result of the + * method. If it throws, the client will not be logged in (and + * its error will be passed to the callback). + * - userCallback: Will be called with no arguments once the user is fully + * logged in, or with the error on error. + * + * */ + function callLoginMethod(options: LoginMethodOptions): void; + + /** + * + * The main entry point for auth packages to hook in to login. + * + * A login handler is a login method which can return `undefined` to + * indicate that the login request is not handled by this handler. + * + * @param name {String} Optional. The service name, used by default + * if a specific service name isn't returned in the result. + * + * @param handler {Function} A function that receives an options object + * (as passed as an argument to the `login` method) and returns one of: + * - `undefined`, meaning don't handle; + * - a login method result object + **/ + function registerLoginHandler( + name: string, + handler: (options: any) => undefined | Object + ): void; + + type Password = + | string + | { + digest: string; + algorithm: 'sha-256'; + }; + + /** + * + * Check whether the provided password matches the bcrypt'ed password in + * the database user record. `password` can be a string (in which case + * it will be run through SHA256 before bcrypt) or an object with + * properties `digest` and `algorithm` (in which case we bcrypt + * `password.digest`). + */ + function _checkPassword( + user: Meteor.User, + password: Password + ): { userId: string; error?: any }; +} + +export namespace Accounts { + type StampedLoginToken = { + token: string; + when: Date; + }; + type HashedStampedLoginToken = { + hashedToken: string; + when: Date; + }; + + function _generateStampedLoginToken(): StampedLoginToken; + function _hashStampedToken(token: StampedLoginToken): HashedStampedLoginToken; + function _insertHashedLoginToken( + userId: string, + token: HashedStampedLoginToken, + query?: Mongo.Selector | Mongo.ObjectID | string + ): void; + function _hashLoginToken(token: string): string; +} diff --git a/packages/accounts-base/package-types.json b/packages/accounts-base/package-types.json new file mode 100644 index 0000000000..e948b74664 --- /dev/null +++ b/packages/accounts-base/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "__types/accounts-base.d.ts" +} diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 32a6df946c..ed41554770 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -48,6 +48,8 @@ Package.onUse(api => { // modules that import the accounts-base package. api.mainModule('server_main.js', 'server'); api.mainModule('client_main.js', 'client'); + + api.addAssets('accounts-base.d.ts', ['client', 'server']); }); Package.onTest(api => { From 43b3b7868dac3837b90e36aec9968813bc8b21f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:06:03 +0200 Subject: [PATCH 003/292] Add types for browser-policy-common package --- .../browser-policy-common.d.ts | 38 +++++++++++++++++++ .../browser-policy-common/package-types.json | 3 ++ packages/browser-policy-common/package.js | 1 + 3 files changed, 42 insertions(+) create mode 100644 packages/browser-policy-common/browser-policy-common.d.ts create mode 100644 packages/browser-policy-common/package-types.json diff --git a/packages/browser-policy-common/browser-policy-common.d.ts b/packages/browser-policy-common/browser-policy-common.d.ts new file mode 100644 index 0000000000..0cfa8678a3 --- /dev/null +++ b/packages/browser-policy-common/browser-policy-common.d.ts @@ -0,0 +1,38 @@ +export namespace BrowserPolicy { + var framing: { + disallow(): void; + restrictToOrigin(origin: string): void; + allowAll(): void; + }; + + var content: { + allowEval(): void; + allowInlineStyles(): void; + allowInlineScripts(): void; + allowSameOriginForAll(): void; + allowDataUrlForAll(): void; + allowOriginForAll(origin: string): void; + allowImageOrigin(origin: string): void; + allowMediaOrigin(origin: string): void; + allowFontOrigin(origin: string): void; + allowStyleOrigin(origin: string): void; + allowScriptOrigin(origin: string): void; + allowFrameOrigin(origin: string): void; + allowFrameAncestorsOrigin(origin: string): void; + allowContentTypeSniffing(): void; + allowAllContentOrigin(): void; + allowAllContentDataUrl(): void; + allowAllContentSameOrigin(): void; + allowConnectOrigin(origin: string): void; + allowObjectOrigin(origin: string): void; + + disallowAll(): void; + disallowInlineStyles(): void; + disallowEval(): void; + disallowInlineScripts(): void; + disallowFont(): void; + disallowObject(): void; + disallowAllContent(): void; + disallowConnect(): void; + }; +} diff --git a/packages/browser-policy-common/package-types.json b/packages/browser-policy-common/package-types.json new file mode 100644 index 0000000000..1b2482b244 --- /dev/null +++ b/packages/browser-policy-common/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "browser-policy-common.d.ts" +} diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 85c2554c3e..9f53f0a238 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -7,4 +7,5 @@ Package.onUse(function (api) { api.use('webapp', 'server'); api.addFiles('browser-policy-common.js', 'server'); api.export('BrowserPolicy', 'server'); + api.addAssets('browser-policy-common.d.ts', ['client', 'server']); }); From 0844cfd5cbf05d8fc393d69c90cd801c726b320e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:21:57 +0200 Subject: [PATCH 004/292] Add types for check package --- packages/check/check.d.ts | 92 +++++++++++++++++++++++++++++++ packages/check/package-types.json | 3 + packages/check/package.js | 2 + 3 files changed, 97 insertions(+) create mode 100644 packages/check/check.d.ts create mode 100644 packages/check/package-types.json diff --git a/packages/check/check.d.ts b/packages/check/check.d.ts new file mode 100644 index 0000000000..4790890b9d --- /dev/null +++ b/packages/check/check.d.ts @@ -0,0 +1,92 @@ +/** + * The namespace for all Match types and methods. + */ +export namespace Match { + interface Matcher { + _meteorCheckMatcherBrand: void; + } + // prettier-ignore + export type Pattern = + typeof String | + typeof Number | + typeof Boolean | + typeof Object | + typeof Function | + (new (...args: any[]) => any) | + undefined | null | string | number | boolean | + [Pattern] | + {[key: string]: Pattern} | + Matcher; + // prettier-ignore + export type PatternMatch = + T extends Matcher ? U : + T extends typeof String ? string : + T extends typeof Number ? number : + T extends typeof Boolean ? boolean : + T extends typeof Object ? object : + T extends typeof Function ? Function : + T extends undefined | null | string | number | boolean ? T : + T extends new (...args: any[]) => infer U ? U : + T extends [Pattern] ? PatternMatch[] : + T extends {[key: string]: Pattern} ? {[K in keyof T]: PatternMatch} : + unknown; + + /** Matches any value. */ + var Any: Matcher; + /** Matches a signed 32-bit integer. Doesn’t match `Infinity`, `-Infinity`, or `NaN`. */ + var Integer: Matcher; + + /** + * Matches either `undefined`, `null`, or pattern. If used in an object, matches only if the key is not set as opposed to the value being set to `undefined` or `null`. This set of conditions + * was chosen because `undefined` arguments to Meteor Methods are converted to `null` when sent over the wire. + */ + function Maybe( + pattern: T + ): Matcher | undefined | null>; + + /** Behaves like `Match.Maybe` except it doesn’t accept `null`. If used in an object, the behavior is identical to `Match.Maybe`. */ + function Optional( + pattern: T + ): Matcher | undefined>; + + /** Matches an Object with the given keys; the value may also have other keys with arbitrary values. */ + function ObjectIncluding( + dico: T + ): Matcher>; + + /** Matches any value that matches at least one of the provided patterns. */ + function OneOf( + ...patterns: T + ): Matcher>; + + /** + * Calls the function condition with the value as the argument. If condition returns true, this matches. If condition throws a `Match.Error` or returns false, this fails. If condition throws + * any other error, that error is thrown from the call to `check` or `Match.test`. + */ + function Where(condition: (val: any) => val is T): Matcher; + function Where(condition: (val: any) => boolean): Matcher; + + /** + * Returns true if the value matches the pattern. + * @param value The value to check + * @param pattern The pattern to match `value` against + */ + function test( + value: any, + pattern: T + ): value is PatternMatch; +} + +/** + * Check that a value matches a pattern. + * If the value does not match the pattern, throw a `Match.Error`. + * + * Particularly useful to assert that arguments to a function have the right + * types and structure. + * @param value The value to check + * @param pattern The pattern to match `value` against + */ +export function check( + value: any, + pattern: T +): asserts value is Match.PatternMatch; diff --git a/packages/check/package-types.json b/packages/check/package-types.json new file mode 100644 index 0000000000..19e3d36ba9 --- /dev/null +++ b/packages/check/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "check.d.ts" +} diff --git a/packages/check/package.js b/packages/check/package.js index ee260f6f24..fa6b3a5ecd 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -7,6 +7,8 @@ Package.onUse(api => { api.use('ecmascript'); api.use('ejson'); + api.addAssets('check.d.ts', ['client', 'server']); + api.mainModule('match.js'); api.export('check'); From 8e7e0fce2c0f1ee3e8096664797281e068400c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:24:43 +0200 Subject: [PATCH 005/292] Add types for ddp package --- packages/ddp/ddp.d.ts | 65 +++++++++++++++++++++++++++++++++ packages/ddp/package-types.json | 3 ++ packages/ddp/package.js | 2 + 3 files changed, 70 insertions(+) create mode 100644 packages/ddp/ddp.d.ts create mode 100644 packages/ddp/package-types.json diff --git a/packages/ddp/ddp.d.ts b/packages/ddp/ddp.d.ts new file mode 100644 index 0000000000..199adb3d55 --- /dev/null +++ b/packages/ddp/ddp.d.ts @@ -0,0 +1,65 @@ +import { Meteor } from 'meteor/meteor'; + +export namespace DDP { + interface DDPStatic { + subscribe(name: string, ...rest: any[]): Meteor.SubscriptionHandle; + call(method: string, ...parameters: any[]): any; + apply(method: string, ...parameters: any[]): any; + methods(IMeteorMethodsDictionary: any): any; + status(): DDPStatus; + reconnect(): void; + disconnect(): void; + onReconnect(): void; + } + + function _allSubscriptionsReady(): boolean; + + type Status = 'connected' | 'connecting' | 'failed' | 'waiting' | 'offline'; + + interface DDPStatus { + connected: boolean; + status: Status; + retryCount: number; + retryTime?: number | undefined; + reason?: string | undefined; + } + + function connect(url: string): DDPStatic; +} + +export namespace DDPCommon { + interface MethodInvocationOptions { + userId: string | null; + setUserId?: ((newUserId: string) => void) | undefined; + isSimulation: boolean; + connection: Meteor.Connection; + randomSeed: string; + } + + /** The state for a single invocation of a method, referenced by this inside a method definition. */ + interface MethodInvocation { + new (options: MethodInvocationOptions): MethodInvocation; + /** + * Call inside a method invocation. Allow subsequent method from this client to begin running in a new fiber. + */ + unblock(): void; + /** + * Set the logged in user. + * @param userId The value that should be returned by `userId` on this connection. + */ + setUserId(userId: string | null): void; + /** + * The id of the user that made this method call, or `null` if no user was logged in. + */ + userId: string | null; + /** + * Access inside a method invocation. Boolean value, true if this invocation is a stub. + */ + isSimulation: boolean; + /** + * Access inside a method invocation. The [connection](#meteor_onconnection) that this method was received on. `null` if the method is not associated with a connection, eg. a server + * initiated method call. Calls to methods made from a server method which was in turn initiated from the client share the same `connection`. + */ + connection: Meteor.Connection; + } +} diff --git a/packages/ddp/package-types.json b/packages/ddp/package-types.json new file mode 100644 index 0000000000..31646e57c4 --- /dev/null +++ b/packages/ddp/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "ddp.d.ts" +} diff --git a/packages/ddp/package.js b/packages/ddp/package.js index 49cace9e05..108285a4d0 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -7,6 +7,8 @@ Package.onUse(function (api) { api.use(['ddp-client'], ['client', 'server']); api.use(['ddp-server'], 'server'); + api.addAssets('ddp.d.ts', ['client', 'server']); + api.export('DDP'); api.export('DDPServer', 'server'); From d6403ac5440536bd8cc1527b1798976fdeb44e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:25:00 +0200 Subject: [PATCH 006/292] Add types for ddp-rate-limiter package --- packages/ddp-rate-limiter/ddp-rate-limiter.d.ts | 17 +++++++++++++++++ packages/ddp-rate-limiter/package-types.json | 3 +++ packages/ddp-rate-limiter/package.js | 1 + 3 files changed, 21 insertions(+) create mode 100644 packages/ddp-rate-limiter/ddp-rate-limiter.d.ts create mode 100644 packages/ddp-rate-limiter/package-types.json diff --git a/packages/ddp-rate-limiter/ddp-rate-limiter.d.ts b/packages/ddp-rate-limiter/ddp-rate-limiter.d.ts new file mode 100644 index 0000000000..fbce221f5a --- /dev/null +++ b/packages/ddp-rate-limiter/ddp-rate-limiter.d.ts @@ -0,0 +1,17 @@ +export namespace DDPRateLimiter { + interface Matcher { + type?: string | ((type: string) => boolean) | undefined; + name?: string | ((name: string) => boolean) | undefined; + userId?: string | ((userId: string) => boolean) | undefined; + connectionId?: string | ((connectionId: string) => boolean) | undefined; + clientAddress?: string | ((clientAddress: string) => boolean) | undefined; + } + + function addRule( + matcher: Matcher, + numRequests: number, + timeInterval: number + ): string; + + function removeRule(ruleId: string): boolean; +} diff --git a/packages/ddp-rate-limiter/package-types.json b/packages/ddp-rate-limiter/package-types.json new file mode 100644 index 0000000000..34869b7735 --- /dev/null +++ b/packages/ddp-rate-limiter/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "ddp-rate-limiter.d.ts" +} diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index a38d55936e..3144f3d5ec 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -14,6 +14,7 @@ Package.describe({ Package.onUse(function(api) { api.use('rate-limit', 'server'); api.use('ecmascript'); + api.addAssets('ddp-rate-limiter.d.ts', ['client', 'server']); api.export('DDPRateLimiter', 'server'); api.mainModule('ddp-rate-limiter.js', 'server'); }); From 7422d4186668dcfc76e2e2143a231d66bbca9bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:27:05 +0200 Subject: [PATCH 007/292] Add types for email package --- packages/email/email.d.ts | 43 +++++++++++++++++++++++++++++++ packages/email/package-types.json | 3 +++ packages/email/package.js | 1 + 3 files changed, 47 insertions(+) create mode 100644 packages/email/email.d.ts create mode 100644 packages/email/package-types.json diff --git a/packages/email/email.d.ts b/packages/email/email.d.ts new file mode 100644 index 0000000000..6b9a356721 --- /dev/null +++ b/packages/email/email.d.ts @@ -0,0 +1,43 @@ +export namespace Email { + interface EmailOptions { + from?: string | undefined; + to?: string | string[] | undefined; + cc?: string | string[] | undefined; + bcc?: string | string[] | undefined; + replyTo?: string | string[] | undefined; + subject?: string | undefined; + text?: string | undefined; + html?: string | undefined; + headers?: Object | undefined; + attachments?: Object[] | undefined; + mailComposer?: MailComposer | undefined; + } + + interface CustomEmailOptions extends EmailOptions { + packageSettings?: unknown; + } + + function send(options: EmailOptions): void; + function hookSend(fn: (options: EmailOptions) => boolean): void; + function customTransport(fn: (options: CustomEmailOptions) => void): void; +} + +export interface MailComposerOptions { + escapeSMTP: boolean; + encoding: string; + charset: string; + keepBcc: boolean; + forceEmbeddedImages: boolean; +} + +export var MailComposer: MailComposerStatic; +export interface MailComposerStatic { + new (options: MailComposerOptions): MailComposer; +} + +export interface MailComposer { + addHeader(name: string, value: string): void; + setMessageOption(from: string, to: string, body: string, html: string): void; + streamMessage(): void; + pipe(stream: any /** fs.WriteStream **/): void; +} diff --git a/packages/email/package-types.json b/packages/email/package-types.json new file mode 100644 index 0000000000..de228d2fc5 --- /dev/null +++ b/packages/email/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "email.d.ts" +} diff --git a/packages/email/package.js b/packages/email/package.js index 3fb07dae92..b3f6de4894 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -10,6 +10,7 @@ Npm.depends({ Package.onUse(function(api) { api.use(['ecmascript', 'logging', 'callback-hook'], 'server'); + api.addAssets('email.d.ts', ['client', 'server']); api.mainModule('email.js', 'server'); api.export(['Email', 'EmailInternals'], 'server'); api.export('EmailTest', 'server', { testOnly: true }); From 350b964c7829e07a268dbaab445ec75d5d83f6b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:36:40 +0200 Subject: [PATCH 008/292] Add types for hot-module-replacement package --- .../hot-module-replacement.d.ts | 14 ++++++++++++++ packages/hot-module-replacement/package-types.json | 3 +++ packages/hot-module-replacement/package.js | 2 ++ 3 files changed, 19 insertions(+) create mode 100644 packages/hot-module-replacement/hot-module-replacement.d.ts create mode 100644 packages/hot-module-replacement/package-types.json diff --git a/packages/hot-module-replacement/hot-module-replacement.d.ts b/packages/hot-module-replacement/hot-module-replacement.d.ts new file mode 100644 index 0000000000..3d92dfc754 --- /dev/null +++ b/packages/hot-module-replacement/hot-module-replacement.d.ts @@ -0,0 +1,14 @@ +export interface Module { + readonly hot?: { + accept(): void; + decline(): void; + dispose(callback: (data: object) => void): void; + data: object | null; + onRequire(callbacks: { + before?(requiredModule: Module, parentId: string): T; + after?(requiredModule: Module, data: T): void; + }): void; + }; +} + +export var module: NodeJS.Module; diff --git a/packages/hot-module-replacement/package-types.json b/packages/hot-module-replacement/package-types.json new file mode 100644 index 0000000000..b11c5dadfe --- /dev/null +++ b/packages/hot-module-replacement/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "hot-module-replacement.d.ts" +} diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index 2d92f97b09..b3986feebc 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -11,6 +11,8 @@ Package.onUse(function(api) { api.use('meteor'); api.use('hot-code-push', { unordered: true }); + api.addAssets('hot-module-replacement.d.ts', ['client', 'server']); + // Provides polyfills needed by Meteor.absoluteUrl in legacy browsers api.use('ecmascript-runtime-client', { weak: true }); From f51c62c0e4a395e136a83bacb1be72c79c3ad661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Mon, 5 Sep 2022 18:37:09 +0200 Subject: [PATCH 009/292] Add types for meteor package --- packages/meteor/meteor.d.ts | 504 +++++++++++++++++++++++++++++ packages/meteor/package-types.json | 3 + packages/meteor/package.js | 2 + 3 files changed, 509 insertions(+) create mode 100644 packages/meteor/meteor.d.ts create mode 100644 packages/meteor/package-types.json diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts new file mode 100644 index 0000000000..0a482c0aa9 --- /dev/null +++ b/packages/meteor/meteor.d.ts @@ -0,0 +1,504 @@ +import { Mongo } from 'meteor/mongo'; +import { EJSONable, EJSONableProperty } from 'meteor/ejson'; +import { Blaze } from 'meteor/blaze'; +import { DDP } from 'meteor/ddp'; + +export type global_Error = Error; + +export namespace Meteor { + /** Global props **/ + /** True if running in client environment. */ + var isClient: boolean; + /** True if running in a Cordova mobile environment. */ + var isCordova: boolean; + /** True if running in server environment. */ + var isServer: boolean; + /** True if running in production environment. */ + var isProduction: boolean; + /** + * `Meteor.release` is a string containing the name of the release with which the project was built (for example, `"1.2.3"`). It is `undefined` if the project was built using a git checkout + * of Meteor. + */ + var release: string; + /** Global props **/ + + /** Settings **/ + interface Settings { + public: { [id: string]: any }; + [id: string]: any; + } + /** + * `Meteor.settings` contains deployment-specific configuration options. You can initialize settings by passing the `--settings` option (which takes the name of a file containing JSON data) + * to `meteor run` or `meteor deploy`. When running your server directly (e.g. from a bundle), you instead specify settings by putting the JSON directly into the `METEOR_SETTINGS` environment + * variable. If the settings object contains a key named `public`, then `Meteor.settings.public` will be available on the client as well as the server. All other properties of + * `Meteor.settings` are only defined on the server. You can rely on `Meteor.settings` and `Meteor.settings.public` being defined objects (not undefined) on both client and server even if + * there are no settings specified. Changes to `Meteor.settings.public` at runtime will be picked up by new client connections. + */ + var settings: Settings; + /** Settings **/ + + /** User **/ + interface UserEmail { + address: string; + verified: boolean; + } + /** + * UserProfile is left intentionally underspecified here, to allow you + * to override it in your application (but keep in mind that the default + * Meteor configuration allows users to write directly to their user + * record's profile field) + */ + interface UserProfile {} + interface User { + _id: string; + username?: string | undefined; + emails?: UserEmail[] | undefined; + createdAt?: Date | undefined; + profile?: UserProfile; + services?: any; + } + + function user(options?: { + fields?: Mongo.FieldSpecifier | undefined; + }): User | null; + + function userId(): string | null; + var users: Mongo.Collection; + /** User **/ + + /** Error **/ + /** + * This class represents a symbolic error thrown by a method. + */ + var Error: ErrorStatic; + interface ErrorStatic { + /** + * @param error A string code uniquely identifying this kind of error. + * This string should be used by callers of the method to determine the + * appropriate action to take, instead of attempting to parse the reason + * or details fields. For example: + * + * ``` + * // on the server, pick a code unique to this error + * // the reason field should be a useful debug message + * throw new Meteor.Error("logged-out", + * "The user must be logged in to post a comment."); + * + * // on the client + * Meteor.call("methodName", function (error) { + * // identify the error + * if (error && error.error === "logged-out") { + * // show a nice error message + * Session.set("errorMessage", "Please log in to post a comment."); + * } + * }); + * ``` + * + * For legacy reasons, some built-in Meteor functions such as `check` throw + * errors with a number in this field. + * + * @param reason Optional. A short human-readable summary of the + * error, like 'Not Found'. + * @param details Optional. Additional information about the error, + * like a textual stack trace. + */ + new (error: string | number, reason?: string, details?: string): Error; + } + interface Error extends global_Error { + error: string | number; + reason?: string | undefined; + details?: string | undefined; + } + var TypedError: TypedErrorStatic; + interface TypedErrorStatic { + new (message: string, errorType: string): TypedError; + } + interface TypedError extends global_Error { + message: string; + errorType: string; + } + /** Error **/ + + /** Method **/ + interface MethodThisType { + /** Access inside a method invocation. Boolean value, true if this invocation is a stub. */ + isSimulation: boolean; + /** The id of the user that made this method call, or `null` if no user was logged in. */ + userId: string | null; + /** + * Access inside a method invocation. The connection that this method was received on. `null` if the method is not associated with a connection, eg. a server initiated method call. Calls + * to methods made from a server method which was in turn initiated from the client share the same `connection`. */ + connection: Connection | null; + /** + * Set the logged in user. + * @param userId The value that should be returned by `userId` on this connection. + */ + setUserId(userId: string | null): void; + /** Call inside a method invocation. Allow subsequent method from this client to begin running in a new fiber. */ + unblock(): void; + } + + /** + * Defines functions that can be invoked over the network by clients. + * @param methods Dictionary whose keys are method names and values are functions. + */ + function methods(methods: { + [key: string]: (this: MethodThisType, ...args: any[]) => any; + }): void; + + /** + * Invokes a method passing any number of arguments. + * @param name Name of method to invoke + * @param args Optional method arguments + */ + function call(name: string, ...args: any[]): any; + + function apply< + Result extends + | EJSONable + | EJSONable[] + | EJSONableProperty + | EJSONableProperty[] + >( + name: string, + args: ReadonlyArray, + options?: { + wait?: boolean | undefined; + onResultReceived?: + | (( + error: global_Error | Meteor.Error | undefined, + result?: Result + ) => void) + | undefined; + /** + * (Client only) if true, don't send this method again on reload, simply call the callback an error with the error code 'invocation-failed'. + */ + noRetry?: boolean | undefined; + returnStubValue?: boolean | undefined; + throwStubExceptions?: boolean | undefined; + }, + asyncCallback?: ( + error: global_Error | Meteor.Error | undefined, + result?: Result + ) => void + ): any; + /** Method **/ + + /** Url **/ + /** + * Generate an absolute URL pointing to the application. The server reads from the `ROOT_URL` environment variable to determine where it is running. This is taken care of automatically for + * apps deployed to Galaxy, but must be provided when using `meteor build`. + */ + var absoluteUrl: { + /** + * @param path A path to append to the root URL. Do not include a leading "`/`". + */ + (path?: string, options?: absoluteUrlOptions): string; + defaultOptions: absoluteUrlOptions; + }; + + interface absoluteUrlOptions { + /** Create an HTTPS URL. */ + secure?: boolean | undefined; + /** Replace localhost with 127.0.0.1. Useful for services that don't recognize localhost as a domain name. */ + replaceLocalhost?: boolean | undefined; + /** Override the default ROOT_URL from the server environment. For example: "`http://foo.example.com`" */ + rootUrl?: string | undefined; + } + /** Url **/ + + /** Timeout **/ + /** + * Call a function repeatedly, with a time delay between calls. + * @param func The function to run + * @param delay Number of milliseconds to wait between each function call. + */ + function setInterval(func: Function, delay: number): number; + + /** + * Call a function in the future after waiting for a specified delay. + * @param func The function to run + * @param delay Number of milliseconds to wait before calling function + */ + function setTimeout(func: Function, delay: number): number; + /** + * Cancel a repeating function call scheduled by `Meteor.setInterval`. + * @param id The handle returned by `Meteor.setInterval` + */ + function clearInterval(id: number): void; + + /** + * Cancel a function call scheduled by `Meteor.setTimeout`. + * @param id The handle returned by `Meteor.setTimeout` + */ + function clearTimeout(id: number): void; + /** + * Defer execution of a function to run asynchronously in the background (similar to `Meteor.setTimeout(func, 0)`. + * @param func The function to run + */ + function defer(func: Function): void; + /** Timeout **/ + + /** utils **/ + /** + * Run code when a client or a server starts. + * @param func A function to run on startup. + */ + function startup(func: Function): void; + + /** + * Wrap a function that takes a callback function as its final parameter. + * The signature of the callback of the wrapped function should be `function(error, result){}`. + * On the server, the wrapped function can be used either synchronously (without passing a callback) or asynchronously + * (when a callback is passed). On the client, a callback is always required; errors will be logged if there is no callback. + * If a callback is provided, the environment captured when the original function was called will be restored in the callback. + * The parameters of the wrapped function must not contain any optional parameters or be undefined, as the callback function is expected to be the final, non-undefined parameter. + * @param func A function that takes a callback as its final parameter + * @param context Optional `this` object against which the original function will be invoked + */ + function wrapAsync(func: Function, context?: Object): any; + + function bindEnvironment(func: TFunc): TFunc; + + class EnvironmentVariable { + readonly slot: number; + constructor(); + get(): T; + getOrNullIfOutsideFiber(): T | null; + withValue(value: T, fn: () => U): U; + } + /** utils **/ + + /** Pub/Sub **/ + interface SubscriptionHandle { + /** Cancel the subscription. This will typically result in the server directing the client to remove the subscription’s data from the client’s cache. */ + stop(): void; + /** True if the server has marked the subscription as ready. A reactive data source. */ + ready(): boolean; + } + interface LiveQueryHandle { + stop(): void; + } + /** Pub/Sub **/ +} + +export namespace Meteor { + /** Login **/ + interface LoginWithExternalServiceOptions { + requestPermissions?: ReadonlyArray | undefined; + requestOfflineToken?: Boolean | undefined; + forceApprovalPrompt?: Boolean | undefined; + loginUrlParameters?: Object | undefined; + redirectUrl?: string | undefined; + loginHint?: string | undefined; + loginStyle?: string | undefined; + } + + function loginWithMeteorDeveloperAccount( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithFacebook( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithGithub( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithGoogle( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithMeetup( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithTwitter( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithWeibo( + options?: Meteor.LoginWithExternalServiceOptions, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWith( + options?: { + requestPermissions?: ReadonlyArray | undefined; + requestOfflineToken?: boolean | undefined; + loginUrlParameters?: Object | undefined; + userEmail?: string | undefined; + loginStyle?: string | undefined; + redirectUrl?: string | undefined; + }, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithPassword( + user: Object | string, + password: string, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loginWithToken( + token: string, + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function loggingIn(): boolean; + + function loggingOut(): boolean; + + function logout( + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + + function logoutOtherClients( + callback?: (error?: global_Error | Meteor.Error | Meteor.TypedError) => void + ): void; + /** Login **/ + + /** Event **/ + interface Event { + type: string; + target: HTMLElement; + currentTarget: HTMLElement; + which: number; + stopPropagation(): void; + stopImmediatePropagation(): void; + preventDefault(): void; + isPropagationStopped(): boolean; + isImmediatePropagationStopped(): boolean; + isDefaultPrevented(): boolean; + } + interface EventHandlerFunction extends Function { + (event?: Meteor.Event, templateInstance?: Blaze.TemplateInstance): void; + } + interface EventMap { + [id: string]: Meteor.EventHandlerFunction; + } + /** Event **/ + + /** Connection **/ + function reconnect(): void; + + function disconnect(): void; + /** Connection **/ + + /** Status **/ + function status(): DDP.DDPStatus; + /** Status **/ + + /** Pub/Sub **/ + /** + * Subscribe to a record set. Returns a handle that provides + * `stop()` and `ready()` methods. + * @param name Name of the subscription. Matches the name of the + * server's `publish()` call. + * @param args Optional arguments passed to publisher + * function on server. + * @param callbacks Optional. May include `onStop` + * and `onReady` callbacks. If there is an error, it is passed as an + * argument to `onStop`. If a function is passed instead of an object, it + * is interpreted as an `onReady` callback. + */ + function subscribe(name: string, ...args: any[]): Meteor.SubscriptionHandle; + /** Pub/Sub **/ +} + +export namespace Meteor { + /** Connection **/ + interface Connection { + id: string; + close: () => void; + onClose: (callback: () => void) => void; + clientAddress: string; + httpHeaders: Object; + } + + function onConnection(callback: (connection: Connection) => void): void; + /** Connection **/ + /** + * Publish a record set. + * @param name If String, name of the record set. If Object, publications Dictionary of publish functions by name. If `null`, the set has no name, and the record set is automatically sent to + * all connected clients. + * @param func Function called on the server each time a client subscribes. Inside the function, `this` is the publish handler object, described below. If the client passed arguments to + * `subscribe`, the function is called with the same arguments. + */ + function publish( + name: string | null, + func: (this: Subscription, ...args: any[]) => void, + options?: { is_auto: boolean } + ): void; + + function _debug(...args: any[]): void; +} + +export interface Subscription { + /** + * Call inside the publish function. Informs the subscriber that a document has been added to the record set. + * @param collection The name of the collection that contains the new document. + * @param id The new document's ID. + * @param fields The fields in the new document. If `_id` is present it is ignored. + */ + added(collection: string, id: string, fields: Object): void; + /** + * Call inside the publish function. Informs the subscriber that a document in the record set has been modified. + * @param collection The name of the collection that contains the changed document. + * @param id The changed document's ID. + * @param fields The fields in the document that have changed, together with their new values. If a field is not present in `fields` it was left unchanged; if it is present in `fields` and + * has a value of `undefined` it was removed from the document. If `_id` is present it is ignored. + */ + changed(collection: string, id: string, fields: Object): void; + /** Access inside the publish function. The incoming connection for this subscription. */ + connection: Meteor.Connection; + /** + * Call inside the publish function. Stops this client's subscription, triggering a call on the client to the `onStop` callback passed to `Meteor.subscribe`, if any. If `error` is not a + * `Meteor.Error`, it will be sanitized. + * @param error The error to pass to the client. + */ + error(error: Error): void; + /** + * Call inside the publish function. Registers a callback function to run when the subscription is stopped. + * @param func The callback function + */ + onStop(func: Function): void; + /** + * Call inside the publish function. Informs the subscriber that an initial, complete snapshot of the record set has been sent. This will trigger a call on the client to the `onReady` + * callback passed to `Meteor.subscribe`, if any. + */ + ready(): void; + /** + * Call inside the publish function. Informs the subscriber that a document has been removed from the record set. + * @param collection The name of the collection that the document has been removed from. + * @param id The ID of the document that has been removed. + */ + removed(collection: string, id: string): void; + /** + * Access inside the publish function. The incoming connection for this subscription. + */ + stop(): void; + /** + * Call inside the publish function. Allows subsequent methods or subscriptions for the client of this subscription + * to begin running without waiting for the publishing to become ready. + */ + unblock(): void; + /** Access inside the publish function. The id of the logged-in user, or `null` if no user is logged in. */ + userId: string | null; +} + +export namespace Meteor { + /** Global props **/ + /** True if running in development environment. */ + var isDevelopment: boolean; + var isTest: boolean; + var isAppTest: boolean; + /** Global props **/ +} diff --git a/packages/meteor/package-types.json b/packages/meteor/package-types.json new file mode 100644 index 0000000000..bc20149ad0 --- /dev/null +++ b/packages/meteor/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "meteor.d.ts" +} diff --git a/packages/meteor/package.js b/packages/meteor/package.js index da45c4cc16..86093b59b8 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -54,6 +54,8 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); + + api.addAssets('meteor.d.ts', ['client', 'server']); }); Package.onTest(function (api) { From 312230110b5d1891eaf409bacfdeec8ca6a7d615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 10:37:04 +0200 Subject: [PATCH 010/292] Add types for modern-browsers package --- packages/modern-browsers/modern.d.ts | 4 ++++ packages/modern-browsers/package-types.json | 3 +++ packages/modern-browsers/package.js | 1 + 3 files changed, 8 insertions(+) create mode 100644 packages/modern-browsers/modern.d.ts create mode 100644 packages/modern-browsers/package-types.json diff --git a/packages/modern-browsers/modern.d.ts b/packages/modern-browsers/modern.d.ts new file mode 100644 index 0000000000..28713c5705 --- /dev/null +++ b/packages/modern-browsers/modern.d.ts @@ -0,0 +1,4 @@ +export function setMinimumBrowserVersions( + versions: Record, + source: string +): void; diff --git a/packages/modern-browsers/package-types.json b/packages/modern-browsers/package-types.json new file mode 100644 index 0000000000..ee517974a2 --- /dev/null +++ b/packages/modern-browsers/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "modern.d.ts" +} diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index 40e95833a3..a18712b61e 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -10,6 +10,7 @@ Package.describe({ Package.onUse(function(api) { api.use('modules'); api.mainModule('modern.js', 'server'); + api.addAssets('modern.d.ts', ['client', 'server']); }); Package.onTest(function(api) { From 6817eabb217d1abbef4f128d9dc41fe8dc652960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 11:09:12 +0200 Subject: [PATCH 011/292] Add types for mongo package --- packages/mongo/mongo.d.ts | 598 ++++++++++++++++++++++++++++++ packages/mongo/package.js | 1 + packages/mongo/package.types.json | 3 + 3 files changed, 602 insertions(+) create mode 100644 packages/mongo/mongo.d.ts create mode 100644 packages/mongo/package.types.json diff --git a/packages/mongo/mongo.d.ts b/packages/mongo/mongo.d.ts new file mode 100644 index 0000000000..43e8e9c3e7 --- /dev/null +++ b/packages/mongo/mongo.d.ts @@ -0,0 +1,598 @@ +import * as MongoNpmModule from 'mongodb'; +import { + Collection as MongoCollection, + CreateIndexesOptions, + Db as MongoDb, + Hint, + IndexSpecification, + MongoClient, +} from 'mongodb'; +import { Meteor } from 'meteor/meteor'; + +// Based on https://github.com/microsoft/TypeScript/issues/28791#issuecomment-443520161 +export type UnionOmit = T extends T + ? Pick> + : never; + +export namespace Mongo { + // prettier-ignore + type BsonType = 1 | "double" | + 2 | "string" | + 3 | "object" | + 4 | "array" | + 5 | "binData" | + 6 | "undefined" | + 7 | "objectId" | + 8 | "bool" | + 9 | "date" | + 10 | "null" | + 11 | "regex" | + 12 | "dbPointer" | + 13 | "javascript" | + 14 | "symbol" | + 15 | "javascriptWithScope" | + 16 | "int" | + 17 | "timestamp" | + 18 | "long" | + 19 | "decimal" | + -1 | "minKey" | + 127 | "maxKey" | "number"; + + type FieldExpression = { + $eq?: T | undefined; + $gt?: T | undefined; + $gte?: T | undefined; + $lt?: T | undefined; + $lte?: T | undefined; + $in?: T[] | undefined; + $nin?: T[] | undefined; + $ne?: T | undefined; + $exists?: boolean | undefined; + $type?: BsonType[] | BsonType | undefined; + $not?: FieldExpression | undefined; + $expr?: FieldExpression | undefined; + $jsonSchema?: any; + $mod?: number[] | undefined; + $regex?: RegExp | string | undefined; + $options?: string | undefined; + $text?: + | { + $search: string; + $language?: string | undefined; + $caseSensitive?: boolean | undefined; + $diacriticSensitive?: boolean | undefined; + } + | undefined; + $where?: string | Function | undefined; + $geoIntersects?: any; + $geoWithin?: any; + $near?: any; + $nearSphere?: any; + $all?: T[] | undefined; + $elemMatch?: T extends {} ? Query : FieldExpression | undefined; + $size?: number | undefined; + $bitsAllClear?: any; + $bitsAllSet?: any; + $bitsAnyClear?: any; + $bitsAnySet?: any; + $comment?: string | undefined; + }; + + type Flatten = T extends any[] ? T[0] : T; + + type Query = { + [P in keyof T]?: Flatten | RegExp | FieldExpression>; + } & { + $or?: Query[] | undefined; + $and?: Query[] | undefined; + $nor?: Query[] | undefined; + } & Dictionary; + + type QueryWithModifiers = { + $query: Query; + $comment?: string | undefined; + $explain?: any; + $hint?: Hint; + $maxScan?: any; + $max?: any; + $maxTimeMS?: any; + $min?: any; + $orderby?: any; + $returnKey?: any; + $showDiskLoc?: any; + $natural?: any; + }; + + type Selector = Query | QueryWithModifiers; + + type Dictionary = { [key: string]: T }; + type PartialMapTo = Partial>; + type OnlyArrays = T extends any[] ? T : never; + type OnlyElementsOfArrays = T extends any[] ? Partial : never; + type ElementsOf = { + [P in keyof T]?: OnlyElementsOfArrays; + }; + type PushModifier = { + [P in keyof T]?: + | OnlyElementsOfArrays + | { + $each?: T[P] | undefined; + $position?: number | undefined; + $slice?: number | undefined; + $sort?: 1 | -1 | Dictionary | undefined; + }; + }; + type ArraysOrEach = { + [P in keyof T]?: OnlyElementsOfArrays | { $each: T[P] }; + }; + type CurrentDateModifier = { $type: 'timestamp' | 'date' } | true; + type Modifier = + | T + | { + $currentDate?: + | (Partial> & + Dictionary) + | undefined; + $inc?: (PartialMapTo & Dictionary) | undefined; + $min?: + | (PartialMapTo & Dictionary) + | undefined; + $max?: + | (PartialMapTo & Dictionary) + | undefined; + $mul?: (PartialMapTo & Dictionary) | undefined; + $rename?: (PartialMapTo & Dictionary) | undefined; + $set?: (Partial & Dictionary) | undefined; + $setOnInsert?: (Partial & Dictionary) | undefined; + $unset?: + | (PartialMapTo & Dictionary) + | undefined; + $addToSet?: (ArraysOrEach & Dictionary) | undefined; + $push?: (PushModifier & Dictionary) | undefined; + $pull?: (ElementsOf & Dictionary) | undefined; + $pullAll?: (Partial & Dictionary) | undefined; + $pop?: (PartialMapTo & Dictionary<1 | -1>) | undefined; + }; + + type OptionalId = UnionOmit & { _id?: any }; + + interface SortSpecifier {} + interface FieldSpecifier { + [id: string]: Number; + } + + type Transform = ((doc: T) => any) | null | undefined; + + type Options = { + /** Sort order (default: natural order) */ + sort?: SortSpecifier | undefined; + /** Number of results to skip at the beginning */ + skip?: number | undefined; + /** Maximum number of results to return */ + limit?: number | undefined; + /** Dictionary of fields to return or exclude. */ + fields?: FieldSpecifier | undefined; + /** (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. */ + hint?: Hint | undefined; + /** (Client only) Default `true`; pass `false` to disable reactivity */ + reactive?: boolean | undefined; + /** Overrides `transform` on the [`Collection`](#collections) for this cursor. Pass `null` to disable transformation. */ + transform?: Transform | undefined; + }; + + type DispatchTransform = Transform extends ( + ...args: any + ) => any + ? ReturnType + : Transform extends null + ? T + : U; + + var Collection: CollectionStatic; + interface CollectionStatic { + /** + * Constructor for a Collection + * @param name The name of the collection. If null, creates an unmanaged (unsynchronized) local collection. + */ + new ( + name: string | null, + options?: { + /** + * The server connection that will manage this collection. Uses the default connection if not specified. Pass the return value of calling `DDP.connect` to specify a different + * server. Pass `null` to specify no connection. Unmanaged (`name` is null) collections cannot specify a connection. + */ + connection?: Object | null | undefined; + /** The method of generating the `_id` fields of new documents in this collection. Possible values: + * - **`'STRING'`**: random strings + * - **`'MONGO'`**: random [`Mongo.ObjectID`](#mongo_object_id) values + * + * The default id generation technique is `'STRING'`. + */ + idGeneration?: string | undefined; + /** + * An optional transformation function. Documents will be passed through this function before being returned from `fetch` or `findOne`, and before being passed to callbacks of + * `observe`, `map`, `forEach`, `allow`, and `deny`. Transforms are *not* applied for the callbacks of `observeChanges` or to cursors returned from publish functions. + */ + transform?: (doc: T) => U; + /** Set to `false` to skip setting up the mutation methods that enable insert/update/remove from client code. Default `true`. */ + defineMutationMethods?: boolean | undefined; + } + ): Collection; + } + interface Collection { + allow = undefined>(options: { + insert?: + | ((userId: string, doc: DispatchTransform) => boolean) + | undefined; + update?: + | (( + userId: string, + doc: DispatchTransform, + fieldNames: string[], + modifier: any + ) => boolean) + | undefined; + remove?: + | ((userId: string, doc: DispatchTransform) => boolean) + | undefined; + fetch?: string[] | undefined; + transform?: Fn | undefined; + }): boolean; + createCappedCollectionAsync( + byteSize?: number, + maxDocuments?: number + ): Promise; + createIndex( + indexSpec: IndexSpecification, + options?: CreateIndexesOptions + ): void; + createIndexAsync( + indexSpec: IndexSpecification, + options?: CreateIndexesOptions + ): Promise; + deny = undefined>(options: { + insert?: + | ((userId: string, doc: DispatchTransform) => boolean) + | undefined; + update?: + | (( + userId: string, + doc: DispatchTransform, + fieldNames: string[], + modifier: any + ) => boolean) + | undefined; + remove?: + | ((userId: string, doc: DispatchTransform) => boolean) + | undefined; + fetch?: string[] | undefined; + transform?: Fn | undefined; + }): boolean; + dropCollectionAsync(): Promise; + dropIndexAsync(indexName: string): void; + /** + * Find the documents in a collection that match the selector. + * @param selector A query describing the documents to find + */ + find(selector?: Selector | ObjectID | string): Cursor; + /** + * Find the documents in a collection that match the selector. + * @param selector A query describing the documents to find + */ + find>( + selector?: Selector | ObjectID | string, + options?: O + ): Cursor>; + /** + * Finds the first document that matches the selector, as ordered by sort and skip options. Returns `undefined` if no matching document is found. + * @param selector A query describing the documents to find + */ + findOne(selector?: Selector | ObjectID | string): U | undefined; + /** + * Finds the first document that matches the selector, as ordered by sort and skip options. Returns `undefined` if no matching document is found. + * @param selector A query describing the documents to find + */ + findOne, 'limit'>>( + selector?: Selector | ObjectID | string, + options?: O + ): DispatchTransform | undefined; + /** + * Finds the first document that matches the selector, as ordered by sort and skip options. Returns `undefined` if no matching document is found. + * @param selector A query describing the documents to find + */ + findOneAsync( + selector?: Selector | ObjectID | string + ): Promise; + /** + * Finds the first document that matches the selector, as ordered by sort and skip options. Returns `undefined` if no matching document is found. + * @param selector A query describing the documents to find + */ + findOneAsync, 'limit'>>( + selector?: Selector | ObjectID | string, + options?: O + ): Promise | undefined>; + /** + * Insert a document in the collection. Returns its unique _id. + * @param doc The document to insert. May not yet have an _id attribute, in which case Meteor will generate one for you. + * @param callback If present, called with an error object as the first argument and, if no error, the _id as the second. + */ + insert(doc: OptionalId, callback?: Function): string; + /** + * Insert a document in the collection. Returns its unique _id. + * @param doc The document to insert. May not yet have an _id attribute, in which case Meteor will generate one for you. + * @param callback If present, called with an error object as the first argument and, if no error, the _id as the second. + */ + insertAsync(doc: OptionalId, callback?: Function): Promise; + /** + * Returns the [`Collection`](http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html) object corresponding to this collection from the + * [npm `mongodb` driver module](https://www.npmjs.com/package/mongodb) which is wrapped by `Mongo.Collection`. + */ + rawCollection(): MongoCollection; + /** + * Returns the [`Db`](http://mongodb.github.io/node-mongodb-native/3.0/api/Db.html) object corresponding to this collection's database connection from the + * [npm `mongodb` driver module](https://www.npmjs.com/package/mongodb) which is wrapped by `Mongo.Collection`. + */ + rawDatabase(): MongoDb; + /** + * Remove documents from the collection + * @param selector Specifies which documents to remove + * @param callback If present, called with an error object as its argument. + */ + remove( + selector: Selector | ObjectID | string, + callback?: Function + ): number; + /** + * Remove documents from the collection + * @param selector Specifies which documents to remove + * @param callback If present, called with an error object as its argument. + */ + removeAsync( + selector: Selector | ObjectID | string, + callback?: Function + ): Promise; + /** + * Modify one or more documents in the collection. Returns the number of matched documents. + * @param selector Specifies which documents to modify + * @param modifier Specifies how to modify the documents + * @param callback If present, called with an error object as the first argument and, if no error, the number of affected documents as the second. + */ + update( + selector: Selector | ObjectID | string, + modifier: Modifier, + options?: { + /** True to modify all matching documents; false to only modify one of the matching documents (the default). */ + multi?: boolean | undefined; + /** True to insert a document if no matching documents are found. */ + upsert?: boolean | undefined; + /** + * Used in combination with MongoDB [filtered positional operator](https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/) to specify which elements to + * modify in an array field. + */ + arrayFilters?: { [identifier: string]: any }[] | undefined; + }, + callback?: Function + ): number; + /** + * Modify one or more documents in the collection. Returns the number of matched documents. + * @param selector Specifies which documents to modify + * @param modifier Specifies how to modify the documents + * @param callback If present, called with an error object as the first argument and, if no error, the number of affected documents as the second. + */ + updateAsync( + selector: Selector | ObjectID | string, + modifier: Modifier, + options?: { + /** True to modify all matching documents; false to only modify one of the matching documents (the default). */ + multi?: boolean | undefined; + /** True to insert a document if no matching documents are found. */ + upsert?: boolean | undefined; + /** + * Used in combination with MongoDB [filtered positional operator](https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/) to specify which elements to + * modify in an array field. + */ + arrayFilters?: { [identifier: string]: any }[] | undefined; + }, + callback?: Function + ): Promise; + /** + * Modify one or more documents in the collection, or insert one if no matching documents were found. Returns an object with keys `numberAffected` (the number of documents modified) and + * `insertedId` (the unique _id of the document that was inserted, if any). + * @param selector Specifies which documents to modify + * @param modifier Specifies how to modify the documents + * @param callback If present, called with an error object as the first argument and, if no error, the number of affected documents as the second. + */ + upsert( + selector: Selector | ObjectID | string, + modifier: Modifier, + options?: { + /** True to modify all matching documents; false to only modify one of the matching documents (the default). */ + multi?: boolean | undefined; + }, + callback?: Function + ): { + numberAffected?: number | undefined; + insertedId?: string | undefined; + }; + /** + * Modify one or more documents in the collection, or insert one if no matching documents were found. Returns an object with keys `numberAffected` (the number of documents modified) and + * `insertedId` (the unique _id of the document that was inserted, if any). + * @param selector Specifies which documents to modify + * @param modifier Specifies how to modify the documents + * @param callback If present, called with an error object as the first argument and, if no error, the number of affected documents as the second. + */ + upsertAsync( + selector: Selector | ObjectID | string, + modifier: Modifier, + options?: { + /** True to modify all matching documents; false to only modify one of the matching documents (the default). */ + multi?: boolean | undefined; + }, + callback?: Function + ): Promise<{ + numberAffected?: number | undefined; + insertedId?: string | undefined; + }>; + _createCappedCollection(byteSize?: number, maxDocuments?: number): void; + /** @deprecated */ + _ensureIndex( + indexSpec: IndexSpecification, + options?: CreateIndexesOptions + ): void; + _dropCollection(): Promise; + _dropIndex(indexName: string): void; + } + + var Cursor: CursorStatic; + interface CursorStatic { + /** + * To create a cursor, use find. To access the documents in a cursor, use forEach, map, or fetch. + */ + new (): Cursor; + } + interface ObserveCallbacks { + added?(document: T): void; + addedAt?(document: T, atIndex: number, before: T | null): void; + changed?(newDocument: T, oldDocument: T): void; + changedAt?(newDocument: T, oldDocument: T, indexAt: number): void; + removed?(oldDocument: T): void; + removedAt?(oldDocument: T, atIndex: number): void; + movedTo?( + document: T, + fromIndex: number, + toIndex: number, + before: T | null + ): void; + } + interface ObserveChangesCallbacks { + added?(id: string, fields: Partial): void; + addedBefore?(id: string, fields: Partial, before: T | null): void; + changed?(id: string, fields: Partial): void; + movedBefore?(id: string, before: T | null): void; + removed?(id: string): void; + } + interface Cursor { + /** + * Returns the number of documents that match a query. + * @param applySkipLimit If set to `false`, the value returned will reflect the total number of matching documents, ignoring any value supplied for limit. (Default: true) + */ + count(applySkipLimit?: boolean): number; + /** + * Returns the number of documents that match a query. + * @param applySkipLimit If set to `false`, the value returned will reflect the total number of matching documents, ignoring any value supplied for limit. (Default: true) + */ + countAsync(applySkipLimit?: boolean): Promise; + /** + * Return all matching documents as an Array. + */ + fetch(): Array; + /** + * Return all matching documents as an Array. + */ + fetchAsync(): Promise>; + /** + * Call `callback` once for each matching document, sequentially and + * synchronously. + * @param callback Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself. + * @param thisArg An object which will be the value of `this` inside `callback`. + */ + forEach( + callback: (doc: U, index: number, cursor: Cursor) => void, + thisArg?: any + ): void; + /** + * Call `callback` once for each matching document, sequentially and + * synchronously. + * @param callback Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself. + * @param thisArg An object which will be the value of `this` inside `callback`. + */ + forEachAsync( + callback: (doc: U, index: number, cursor: Cursor) => void, + thisArg?: any + ): Promise; + /** + * Map callback over all matching documents. Returns an Array. + * @param callback Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself. + * @param thisArg An object which will be the value of `this` inside `callback`. + */ + map( + callback: (doc: U, index: number, cursor: Cursor) => M, + thisArg?: any + ): Array; + /** + * Map callback over all matching documents. Returns an Array. + * @param callback Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself. + * @param thisArg An object which will be the value of `this` inside `callback`. + */ + mapAsync( + callback: (doc: U, index: number, cursor: Cursor) => M, + thisArg?: any + ): Promise>; + /** + * Watch a query. Receive callbacks as the result set changes. + * @param callbacks Functions to call to deliver the result set as it changes + */ + observe(callbacks: ObserveCallbacks): Meteor.LiveQueryHandle; + /** + * Watch a query. Receive callbacks as the result set changes. Only the differences between the old and new documents are passed to the callbacks. + * @param callbacks Functions to call to deliver the result set as it changes + */ + observeChanges( + callbacks: ObserveChangesCallbacks, + options?: { nonMutatingCallbacks?: boolean | undefined } + ): Meteor.LiveQueryHandle; + [Symbol.iterator](): Iterator; + [Symbol.asyncIterator](): AsyncIterator; + } + + var ObjectID: ObjectIDStatic; + interface ObjectIDStatic { + /** + * Create a Mongo-style `ObjectID`. If you don't specify a `hexString`, the `ObjectID` will generated randomly (not using MongoDB's ID construction rules). + + * @param hexString The 24-character hexadecimal contents of the ObjectID to create + */ + new (hexString?: string): ObjectID; + } + interface ObjectID { + toHexString(): string; + equals(otherID: ObjectID): boolean; + } + + function setConnectionOptions(options: any): void; +} + +export namespace Mongo { + interface AllowDenyOptions { + insert?: ((userId: string, doc: any) => boolean) | undefined; + update?: + | (( + userId: string, + doc: any, + fieldNames: string[], + modifier: any + ) => boolean) + | undefined; + remove?: ((userId: string, doc: any) => boolean) | undefined; + fetch?: string[] | undefined; + transform?: Function | null | undefined; + } +} + +export declare module MongoInternals { + interface MongoConnection { + db: MongoDb; + client: MongoClient; + } + + function defaultRemoteCollectionDriver(): { + mongo: MongoConnection; + }; + + var NpmModules: { + mongodb: { + version: string; + module: typeof MongoNpmModule; + }; + }; +} diff --git a/packages/mongo/package.js b/packages/mongo/package.js index a6e1be4d70..39dd505837 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -82,6 +82,7 @@ Package.onUse(function (api) { api.addFiles('remote_collection_driver.js', 'server'); api.addFiles('collection.js', ['client', 'server']); api.addFiles('connection_options.js', 'server'); + api.addAssets('mongo.d.ts', ['client', 'server']); }); Package.onTest(function (api) { diff --git a/packages/mongo/package.types.json b/packages/mongo/package.types.json new file mode 100644 index 0000000000..97c9c11e61 --- /dev/null +++ b/packages/mongo/package.types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "mongo.d.ts" +} From e3a88b2218ca5cc9d08bd27e1846c42c771c9f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 11:14:39 +0200 Subject: [PATCH 012/292] Add types for promise package --- packages/promise/package.js | 1 + packages/promise/package.types.json | 3 +++ packages/promise/promise.d.ts | 23 +++++++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 packages/promise/package.types.json create mode 100644 packages/promise/promise.d.ts diff --git a/packages/promise/package.js b/packages/promise/package.js index fad988b619..c0b3d613b6 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -20,6 +20,7 @@ Package.onUse(function(api) { api.mainModule("client.js", "client"); api.mainModule("server.js", "server"); api.export("Promise"); + api.addAssets("promise.d.ts", ["client", "server"]); }); Package.onTest(function(api) { diff --git a/packages/promise/package.types.json b/packages/promise/package.types.json new file mode 100644 index 0000000000..b939961149 --- /dev/null +++ b/packages/promise/package.types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "promise.d.ts" +} diff --git a/packages/promise/promise.d.ts b/packages/promise/promise.d.ts new file mode 100644 index 0000000000..2e6b034b55 --- /dev/null +++ b/packages/promise/promise.d.ts @@ -0,0 +1,23 @@ +export class Promise extends globalThis.Promise { + static async< + Fn extends (this: This, ...args: Args) => any, + This, + Args extends any[] + >( + fn: Fn, + allowReuseOfCurrentFiber?: boolean + ): (this: This, ...args: Args) => Promise>; + static asyncApply< + Fn extends (this: This, ...args: Args) => any, + This, + Args extends any[] + >( + fn: Fn, + context: This, + args: Args, + allowReuseOfCurrentFiber?: boolean + ): Promise>; + static await(value: PromiseLike): T; + static awaitAll(values: Iterable>): T[]; + await(): T; +} From 51f4b58a5b3a3dc92ef20cdcf0620814a8c740ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 11:46:11 +0200 Subject: [PATCH 013/292] Add types for random package --- packages/random/package-types.json | 3 +++ packages/random/package.js | 1 + packages/random/random.d.ts | 13 +++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 packages/random/package-types.json create mode 100644 packages/random/random.d.ts diff --git a/packages/random/package-types.json b/packages/random/package-types.json new file mode 100644 index 0000000000..71bd4af0cd --- /dev/null +++ b/packages/random/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "random.d.ts" +} diff --git a/packages/random/package.js b/packages/random/package.js index 370077010c..1f6dcb9231 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -8,6 +8,7 @@ Package.onUse(function (api) { api.export('Random'); api.mainModule('main_client.js', 'client'); api.mainModule('main_server.js', 'server'); + api.addAssets('random.d.ts', ['client', 'server']); }); Package.onTest(function (api) { diff --git a/packages/random/random.d.ts b/packages/random/random.d.ts new file mode 100644 index 0000000000..fd529f9a4d --- /dev/null +++ b/packages/random/random.d.ts @@ -0,0 +1,13 @@ +export namespace Random { + function id(numberOfChars?: number): string; + + function secret(numberOfChars?: number): string; + + function fraction(): number; + // @param numberOfDigits, @returns a random hex string of the given length + function hexString(numberOfDigits: number): string; + // @param array, @return a random element in array + function choice(array: T[]): T | undefined; + // @param str, @return a random char in str + function choice(str: string): string; +} From c92796622a48650dc193946825d6bbcf9c10dfab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 11:56:22 +0200 Subject: [PATCH 014/292] Add types for reactive-dict package --- packages/reactive-dict/package-types.json | 3 + packages/reactive-dict/package.js | 1 + packages/reactive-dict/reactive-dict.d.ts | 94 +++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 packages/reactive-dict/package-types.json create mode 100644 packages/reactive-dict/reactive-dict.d.ts diff --git a/packages/reactive-dict/package-types.json b/packages/reactive-dict/package-types.json new file mode 100644 index 0000000000..089231243f --- /dev/null +++ b/packages/reactive-dict/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "reactive-dict.d.ts" +} diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index ee7d4e4e9f..62a7ad8788 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -9,6 +9,7 @@ Package.onUse(function (api) { api.use(['mongo', 'reload'], { weak: true }); api.mainModule('migration.js'); api.export('ReactiveDict'); + api.addAssets('reactive-dict.d.ts', ['client', 'server']); }); Package.onTest(function (api) { diff --git a/packages/reactive-dict/reactive-dict.d.ts b/packages/reactive-dict/reactive-dict.d.ts new file mode 100644 index 0000000000..78c671c4d3 --- /dev/null +++ b/packages/reactive-dict/reactive-dict.d.ts @@ -0,0 +1,94 @@ +import { EJSONable } from 'meteor/ejson'; + +export class ReactiveDict { + /** + * Constructor for a ReactiveDict, which represents a reactive dictionary of key/value pairs. + * @param name When a name is passed, preserves contents across Hot Code Pushes + * @param initialValue The default values for the dictionary + */ + constructor(name?: string, initialValue?: Partial); + /** + * Set a value for a key if it hasn't been set before. + * Otherwise works exactly the same as `ReactiveDict.set`. + * @param key The key to set, eg, `selectedItem` + * @param value The new value for `key` + */ + setDefault

(key: P, value?: O[P]): void; + /** + * Set a value for a key if it hasn't been set before. + * Otherwise works exactly the same as `ReactiveDict.set`. + */ + setDefault(object: Partial): void; + /** + * Set a value for a key in the ReactiveDict. Notify any listeners + * that the value has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `ReactiveDict.get` on this `key`.) + * @param key The key to set, eg, `selectedItem` + * @param value The new value for `key` + */ + set

(key: P, value?: O[P]): void; + /** + * Set a value for a key in the ReactiveDict. Notify any listeners + * that the value has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `ReactiveDict.get` on this `key`.) + */ + set(object: Partial): void; + /** + * Get the value assiciated with a key. If inside a reactive + * computation, invalidate the computation the next time the + * value associated with this key is changed by `ReactiveDict.set`. + * This returns a clone of the value, so if it's an object or an array, + * mutating the returned value has no effect on the value stored in the + * ReactiveDict. + * @param key The key of the element to return + */ + get

(key: P): O[P] | undefined; + /** + * Test if the stored entry for a key is equal to a value. If inside a + * reactive computation, invalidate the computation the next + * time the variable changes to or from the value. + * @param key The name of the session variable to test + * @param value The value to + * test against + */ + equals

( + key: P, + value: string | number | boolean | undefined | null + ): boolean; + /** + * Get all key-value pairs as a plain object. If inside a reactive + * computation, invalidate the computation the next time the + * value associated with any key is changed by `ReactiveDict.set`. + * This returns a clone of each value, so if it's an object or an array, + * mutating the returned value has no effect on the value stored in the + * ReactiveDict. + */ + all(): Partial; + /** + * remove all key-value pairs from the ReactiveDict. Notify any + * listeners that the value has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `ReactiveDict.get` on this `key`.) + */ + clear(): void; + + /** + * remove a key-value pair from the ReactiveDict. Notify any listeners + * that the value has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `ReactiveDict.get` on this `key`.) + * @param key The key to delete, eg, `selectedItem` + * @return did remove + */ + delete

(key: P): boolean; + /** + * Clear all values from the reactiveDict and prevent it from being + * migrated on a Hot Code Pushes. Notify any listeners + * that the value has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `ReactiveDict.get` on this `key`.) + */ + destroy(): void; +} From 51ee25df495a9384b416bd8af6626bdd3b0f23e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 12:45:42 +0200 Subject: [PATCH 015/292] Add types for reactive-var package --- packages/reactive-var/package-types.json | 3 +++ packages/reactive-var/package.js | 1 + packages/reactive-var/reactive-var.d.ts | 25 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 packages/reactive-var/package-types.json create mode 100644 packages/reactive-var/reactive-var.d.ts diff --git a/packages/reactive-var/package-types.json b/packages/reactive-var/package-types.json new file mode 100644 index 0000000000..24149d998a --- /dev/null +++ b/packages/reactive-var/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "reactive-var.d.ts" +} diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 029608a876..e452ffe216 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -9,4 +9,5 @@ Package.onUse(function (api) { api.use('tracker'); api.addFiles('reactive-var.js'); + api.addAssets('reactive-var.d.ts', ['client', 'server']); }); diff --git a/packages/reactive-var/reactive-var.d.ts b/packages/reactive-var/reactive-var.d.ts new file mode 100644 index 0000000000..b47730aa51 --- /dev/null +++ b/packages/reactive-var/reactive-var.d.ts @@ -0,0 +1,25 @@ +export var ReactiveVar: ReactiveVarStatic; + +export interface ReactiveVarStatic { + /** + * Constructor for a ReactiveVar, which represents a single reactive variable. + * @param initialValue The initial value to set. `equalsFunc` is ignored when setting the initial value. + * @param equalsFunc A function of two arguments, called on the old value and the new value whenever the ReactiveVar is set. If it returns true, no set is performed. If omitted, the default + * `equalsFunc` returns true if its arguments are `===` and are of type number, boolean, string, undefined, or null. + */ + new ( + initialValue: T, + equalsFunc?: (oldValue: T, newValue: T) => boolean + ): ReactiveVar; +} + +export interface ReactiveVar { + /** + * Returns the current value of the ReactiveVar, establishing a reactive dependency. + */ + get(): T; + /** + * Sets the current value of the ReactiveVar, invalidating the Computations that called `get` if `newValue` is different from the old value. + */ + set(newValue: T): void; +} From d3acf63a8ffb95ccb7ba1f84835c17d2ed3dc155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 13:45:55 +0200 Subject: [PATCH 016/292] Add types for server-render package --- packages/server-render/package-types.json | 3 ++ packages/server-render/package.js | 1 + packages/server-render/server-render.d.ts | 36 +++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 packages/server-render/package-types.json create mode 100644 packages/server-render/server-render.d.ts diff --git a/packages/server-render/package-types.json b/packages/server-render/package-types.json new file mode 100644 index 0000000000..11840961ec --- /dev/null +++ b/packages/server-render/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "server-render.d.ts" +} diff --git a/packages/server-render/package.js b/packages/server-render/package.js index 47d3cadc5c..7b3dab2aaa 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -17,6 +17,7 @@ Package.onUse(function(api) { api.use("webapp"); api.mainModule("client.js", "client", { lazy: true }); api.mainModule("server.js", "server"); + api.addAssets('server-render.d.ts', ['client', 'server']); }); Package.onTest(function(api) { diff --git a/packages/server-render/server-render.d.ts b/packages/server-render/server-render.d.ts new file mode 100644 index 0000000000..9a16690cfd --- /dev/null +++ b/packages/server-render/server-render.d.ts @@ -0,0 +1,36 @@ +import * as http from 'http'; + +// NodeJS.ReadableStream only works on server. +// HTMLElement only works on client. +type Content = string | Content[] | NodeJS.ReadableStream | HTMLElement; + +interface ClientSink { + // Client and server. Only client + appendToHead(html: Content): void; + appendToBody(html: Content): void; + appendToElementById(id: string, html: Content): void; + renderIntoElementById(id: string, html: Content): void; + redirect(location: string, code?: number): void; + + // Server-only, but error-raising stubs provided to client: + setStatusCode(code: number): void; + setHeader(key: string, value: number | string | string[]): void; + getHeaders(): http.IncomingHttpHeaders; + getCookies(): { [key: string]: string }; +} + +interface ServerSink extends ClientSink { + // Server-only: + request: http.IncomingMessage; + arch: string; + head: string; + body: string; + htmlById: { [key: string]: string }; + maybeMadeChanges: boolean; +} + +type Sink = ClientSink | ServerSink; + +type Callback = (sink: Sink) => Promise | any; + +export function onPageLoad(callback: T): T; From 88829ee941949548b63e5da5437c9508b9e599c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 13:51:06 +0200 Subject: [PATCH 017/292] Add types for service-configuration package --- packages/service-configuration/package-types.json | 3 +++ packages/service-configuration/package.js | 1 + .../service-configuration/service-configuration.d.ts | 10 ++++++++++ 3 files changed, 14 insertions(+) create mode 100644 packages/service-configuration/package-types.json create mode 100644 packages/service-configuration/service-configuration.d.ts diff --git a/packages/service-configuration/package-types.json b/packages/service-configuration/package-types.json new file mode 100644 index 0000000000..16883a4dac --- /dev/null +++ b/packages/service-configuration/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "service-configuration.d.ts" +} diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index ec496a1fff..b411945e8d 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -10,4 +10,5 @@ Package.onUse(function(api) { api.export('ServiceConfiguration'); api.addFiles('service_configuration_common.js', ['client', 'server']); api.addFiles('service_configuration_server.js', 'server'); + api.addAssets('service-configuration.d.ts', ['client', 'server']); }); diff --git a/packages/service-configuration/service-configuration.d.ts b/packages/service-configuration/service-configuration.d.ts new file mode 100644 index 0000000000..267f0ac7b2 --- /dev/null +++ b/packages/service-configuration/service-configuration.d.ts @@ -0,0 +1,10 @@ +import { Mongo } from 'meteor/mongo'; + +interface Configuration { + appId: string; + secret: string; +} + +declare var ServiceConfiguration: { + configurations: Mongo.Collection; +}; From 8b891a406346cab149ca8861d38d1158d0188612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 13:59:03 +0200 Subject: [PATCH 018/292] Add types for session package --- packages/session/package-types.json | 3 +++ packages/session/package.js | 1 + packages/session/session.d.ts | 41 +++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 packages/session/package-types.json create mode 100644 packages/session/session.d.ts diff --git a/packages/session/package-types.json b/packages/session/package-types.json new file mode 100644 index 0000000000..ee5a93cac4 --- /dev/null +++ b/packages/session/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "session.d.ts" +} diff --git a/packages/session/package.js b/packages/session/package.js index 5515510f25..0ef45d2cea 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -13,6 +13,7 @@ Package.onUse(function (api) { api.export('Session', 'client'); api.mainModule('session.js', 'client'); + api.addAssets('session.d.ts', ['client', 'server']); }); Package.onTest(function (api) { diff --git a/packages/session/session.d.ts b/packages/session/session.d.ts new file mode 100644 index 0000000000..c32f863244 --- /dev/null +++ b/packages/session/session.d.ts @@ -0,0 +1,41 @@ +import { EJSONable } from 'meteor/ejson'; + +declare namespace Session { + /** + * Test if a session variable is equal to a value. If inside a + * reactive computation, invalidate the computation the next + * time the variable changes to or from the value. + * @param key The name of the session variable to test + * @param value The value to test against + */ + function equals(key: string, value: string | number | boolean | any): boolean; + + /** + * Get the value of a session variable. If inside a reactive + * computation, invalidate the computation the next time the + * value of the variable is changed by `Session.set`. This + * returns a clone of the session value, so if it's an object or an array, + * mutating the returned value has no effect on the value stored in the + * session. + * @param key The name of the session variable to return + */ + function get(key: string): any; + + /** + * Set a variable in the session. Notify any listeners that the value + * has changed (eg: redraw templates, and rerun any + * `Tracker.autorun` computations, that called + * `Session.get` on this `key`.) + * @param key The key to set, eg, `selectedItem` + * @param value The new value for `key` + */ + function set(key: string, value: EJSONable | any): void; + + /** + * Set a variable in the session if it hasn't been set before. + * Otherwise works exactly the same as `Session.set`. + * @param key The key to set, eg, `selectedItem` + * @param value The new value for `key` + */ + function setDefault(key: string, value: EJSONable | any): void; +} From cc226bf4e305ae45d312f6c4716c697f342a3d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 15:06:23 +0200 Subject: [PATCH 019/292] Add types for tracker package --- packages/tracker/package-types.json | 3 + packages/tracker/package.js | 1 + packages/tracker/tracker.d.ts | 128 ++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 packages/tracker/package-types.json create mode 100644 packages/tracker/tracker.d.ts diff --git a/packages/tracker/package-types.json b/packages/tracker/package-types.json new file mode 100644 index 0000000000..7e03462336 --- /dev/null +++ b/packages/tracker/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "tracker.d.ts" +} diff --git a/packages/tracker/package.js b/packages/tracker/package.js index 9475828977..f56f16be60 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -8,6 +8,7 @@ Package.onUse(function (api) { api.addFiles("tracker.js"); api.export("Tracker"); api.export("Deps"); + api.addAssets("tracker.d.ts", ["client", "server"]); }); Package.onTest(function (api) { diff --git a/packages/tracker/tracker.d.ts b/packages/tracker/tracker.d.ts new file mode 100644 index 0000000000..cbd49a9b29 --- /dev/null +++ b/packages/tracker/tracker.d.ts @@ -0,0 +1,128 @@ +/** + * The namespace for Tracker-related methods. + */ +export declare namespace Tracker { + function Computation(): void; + /** + * A Computation object represents code that is repeatedly rerun + * in response to + * reactive data changes. Computations don't have return values; they just + * perform actions, such as rerendering a template on the screen. Computations + * are created using Tracker.autorun. Use stop to prevent further rerunning of a + * computation. + */ + interface Computation { + /** + * True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times. + */ + firstRun: boolean; + /** + * Invalidates this computation so that it will be rerun. + */ + invalidate(): void; + /** + * True if this computation has been invalidated (and not yet rerun), or if it has been stopped. + */ + invalidated: boolean; + /** + * Registers `callback` to run when this computation is next invalidated, or runs it immediately if the computation is already invalidated. The callback is run exactly once and not upon + * future invalidations unless `onInvalidate` is called again after the computation becomes valid again. + * @param callback Function to be called on invalidation. Receives one argument, the computation that was invalidated. + */ + onInvalidate(callback: Function): void; + /** + * Registers `callback` to run when this computation is stopped, or runs it immediately if the computation is already stopped. The callback is run after any `onInvalidate` callbacks. + * @param callback Function to be called on stop. Receives one argument, the computation that was stopped. + */ + onStop(callback: Function): void; + /** + * Prevents this computation from rerunning. + */ + stop(): void; + /** + * True if this computation has been stopped. + */ + stopped: boolean; + } + /** + * The current computation, or `null` if there isn't one. The current computation is the `Tracker.Computation` object created by the innermost active call to + * `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed. + */ + var currentComputation: Computation; + + var Dependency: DependencyStatic; + /** + * A Dependency represents an atomic unit of reactive data that a + * computation might depend on. Reactive data sources such as Session or + * Minimongo internally create different Dependency objects for different + * pieces of data, each of which may be depended on by multiple computations. + * When the data changes, the computations are invalidated. + */ + interface DependencyStatic { + new (): Dependency; + } + interface Dependency { + /** + * Invalidate all dependent computations immediately and remove them as dependents. + */ + changed(): void; + /** + * Declares that the current computation (or `fromComputation` if given) depends on `dependency`. The computation will be invalidated the next time `dependency` changes. + * If there is no current computation and `depend()` is called with no arguments, it does nothing and returns false. + * Returns true if the computation is a new dependent of `dependency` rather than an existing one. + * @param fromComputation An optional computation declared to depend on `dependency` instead of the current computation. + */ + depend(fromComputation?: Computation): boolean; + /** + * True if this Dependency has one or more dependent Computations, which would be invalidated if this Dependency were to change. + */ + hasDependents(): boolean; + } + + /** + * True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun. + */ + var active: boolean; + + /** + * Schedules a function to be called during the next flush, or later in the current flush if one is in progress, after all invalidated computations have been rerun. The function will be run + * once and not on subsequent flushes unless `afterFlush` is called again. + * @param callback A function to call at flush time. + */ + function afterFlush(callback: Function): void; + + /** + * Run a function now and rerun it later whenever its dependencies + * change. Returns a Computation object that can be used to stop or observe the + * rerunning. + * @param runFunc The function to run. It receives one argument: the Computation object that will be returned. + */ + function autorun( + runFunc: (computation: Computation) => void, + options?: { + /** + * The function to run when an error + * happens in the Computation. The only argument it receives is the Error + * thrown. Defaults to the error being logged to the console. + */ + onError?: Function | undefined; + } + ): Computation; + + /** + * Process all reactive updates immediately and ensure that all invalidated computations are rerun. + */ + function flush(): void; + + /** + * Run a function without tracking dependencies. + * @param func A function to call immediately. + */ + function nonreactive(func: () => T): T; + + /** + * Registers a new `onInvalidate` callback on the current computation (which must exist), to be called immediately when the current computation is invalidated or stopped. + * @param callback A callback function that will be invoked as `func(c)`, where `c` is the computation on which the callback is registered. + */ + function onInvalidate(callback: Function): void; +} From 79563d6da25f9011f69db27c213e87a0ef5a7772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Wed, 7 Sep 2022 16:02:59 +0200 Subject: [PATCH 020/292] Add types for webapp package --- packages/webapp/package-types.json | 3 ++ packages/webapp/package.js | 1 + packages/webapp/webapp.d.ts | 87 ++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 packages/webapp/package-types.json create mode 100644 packages/webapp/webapp.d.ts diff --git a/packages/webapp/package-types.json b/packages/webapp/package-types.json new file mode 100644 index 0000000000..ba477f3ba8 --- /dev/null +++ b/packages/webapp/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "webapp.d.ts" +} diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 5464ea7dc8..5420188efc 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -57,6 +57,7 @@ Package.onUse(function(api) { api.export('WebApp', 'client'); api.mainModule('webapp_cordova.js', 'web.cordova'); + api.addAssets('webapp.d.ts', ['client', 'server']); }); Package.onTest(function(api) { diff --git a/packages/webapp/webapp.d.ts b/packages/webapp/webapp.d.ts new file mode 100644 index 0000000000..2a3d9ecdfb --- /dev/null +++ b/packages/webapp/webapp.d.ts @@ -0,0 +1,87 @@ +import * as http from 'http'; +import * as connect from 'connect'; + +declare interface StaticFiles { + [key: string]: { + content?: string | undefined; + absolutePath: string; + cacheable: boolean; + hash: string; + sourceMapUrl?: string | undefined; + type: string; + }; +} + +declare module WebApp { + var defaultArch: string; + var clientPrograms: { + [key: string]: { + format: string; + manifest: any; + version: string; + cordovaCompatibilityVersions?: any; + PUBLIC_SETTINGS: any; + }; + }; + var connectHandlers: connect.Server; + var rawConnectHandlers: connect.Server; + var httpServer: http.Server; + var connectApp: connect.Server; + function suppressConnectErrors(): void; + function onListening(callback: Function): void; + + type RuntimeConfigHookCallback = (options: { + arch: 'web.browser' | 'web.browser.legacy' | 'web.cordova'; + request: http.IncomingMessage; + encodedCurrentConfig: string; + updated: boolean; + }) => string | undefined | null | false; + function addRuntimeConfigHook(callback: RuntimeConfigHookCallback): void; + function decodeRuntimeConfig(rtimeConfigString: string): unknown; + function encodeRuntimeConfig(rtimeConfig: unknown): string; +} + +declare module WebAppInternals { + var NpmModules: { + [key: string]: { + version: string; + module: any; + }; + }; + function identifyBrowser( + userAgentString: string + ): { + name: string; + major: string; + minor: string; + patch: string; + }; + function registerBoilerplateDataCallback( + key: string, + callback: Function + ): Function; + function generateBoilerplateInstance( + arch: string, + manifest: any, + additionalOptions: any + ): any; + + function staticFilesMiddleware( + staticFiles: StaticFiles, + req: http.IncomingMessage, + res: http.ServerResponse, + next: Function + ): void; + function parsePort(port: string): number; + function reloadClientPrograms(): void; + function generateBoilerplate(): void; + var staticFiles: StaticFiles; + function inlineScriptsAllowed(): boolean; + function setInlineScriptsAllowed(inlineScriptsAllowed: boolean): void; + + function setBundledJsCssUrlRewriteHook(hookFn: (url: string) => string): void; + function setBundledJsCssPrefix(bundledJsCssPrefix: string): void; + function addStaticJs(): void; + function getBoilerplate(request: http.IncomingMessage, arch: string): string; + var additionalStaticJs: any; +} From 37cbb9b06bcc5e0e5372e5d778c84c063a8c32b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 9 Sep 2022 13:19:09 +0200 Subject: [PATCH 021/292] Add types for underscore package --- packages/underscore/package-types.json | 3 +++ packages/underscore/package.js | 2 ++ packages/underscore/underscore.d.ts | 2 ++ 3 files changed, 7 insertions(+) create mode 100644 packages/underscore/package-types.json create mode 100644 packages/underscore/underscore.d.ts diff --git a/packages/underscore/package-types.json b/packages/underscore/package-types.json new file mode 100644 index 0000000000..347b86d05e --- /dev/null +++ b/packages/underscore/package-types.json @@ -0,0 +1,3 @@ +{ + "typesEntry": "underscore.d.ts" +} diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 483509a727..dca1b73c77 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -27,6 +27,8 @@ Package.onUse(function (api) { // numeric length field whose constructor === Object are still treated as // objects, not as arrays. Search for looksLikeArray. api.addFiles(['pre.js', 'underscore.js', 'post.js']); + + api.addAssets('underscore.d.ts', ['client', 'server']); }); diff --git a/packages/underscore/underscore.d.ts b/packages/underscore/underscore.d.ts new file mode 100644 index 0000000000..ffbb281e51 --- /dev/null +++ b/packages/underscore/underscore.d.ts @@ -0,0 +1,2 @@ +import * as _ from 'underscore'; +export { _ }; From 8e30cfd7112f040214f4ac4053938deab8181349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 9 Sep 2022 13:21:34 +0200 Subject: [PATCH 022/292] Add declarations and missing exports --- packages/check/check.d.ts | 2 +- packages/email/email.d.ts | 3 ++- .../hot-module-replacement/hot-module-replacement.d.ts | 2 +- packages/modern-browsers/modern.d.ts | 2 +- packages/promise/promise.d.ts | 2 +- packages/reactive-dict/reactive-dict.d.ts | 2 +- packages/reactive-var/reactive-var.d.ts | 2 +- packages/server-render/server-render.d.ts | 10 +++++----- .../service-configuration/service-configuration.d.ts | 4 ++-- packages/session/session.d.ts | 2 +- packages/tracker/tracker.d.ts | 2 +- packages/webapp/webapp.d.ts | 6 +++--- 12 files changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/check/check.d.ts b/packages/check/check.d.ts index 4790890b9d..0322aab9e9 100644 --- a/packages/check/check.d.ts +++ b/packages/check/check.d.ts @@ -86,7 +86,7 @@ export namespace Match { * @param value The value to check * @param pattern The pattern to match `value` against */ -export function check( +export declare function check( value: any, pattern: T ): asserts value is Match.PatternMatch; diff --git a/packages/email/email.d.ts b/packages/email/email.d.ts index 6b9a356721..71380d328e 100644 --- a/packages/email/email.d.ts +++ b/packages/email/email.d.ts @@ -30,7 +30,8 @@ export interface MailComposerOptions { forceEmbeddedImages: boolean; } -export var MailComposer: MailComposerStatic; +export declare var MailComposer: MailComposerStatic; + export interface MailComposerStatic { new (options: MailComposerOptions): MailComposer; } diff --git a/packages/hot-module-replacement/hot-module-replacement.d.ts b/packages/hot-module-replacement/hot-module-replacement.d.ts index 3d92dfc754..767262f3ac 100644 --- a/packages/hot-module-replacement/hot-module-replacement.d.ts +++ b/packages/hot-module-replacement/hot-module-replacement.d.ts @@ -11,4 +11,4 @@ export interface Module { }; } -export var module: NodeJS.Module; +export declare var module: NodeJS.Module; diff --git a/packages/modern-browsers/modern.d.ts b/packages/modern-browsers/modern.d.ts index 28713c5705..69f1268f74 100644 --- a/packages/modern-browsers/modern.d.ts +++ b/packages/modern-browsers/modern.d.ts @@ -1,4 +1,4 @@ -export function setMinimumBrowserVersions( +export declare function setMinimumBrowserVersions( versions: Record, source: string ): void; diff --git a/packages/promise/promise.d.ts b/packages/promise/promise.d.ts index 2e6b034b55..38698fc7cb 100644 --- a/packages/promise/promise.d.ts +++ b/packages/promise/promise.d.ts @@ -1,4 +1,4 @@ -export class Promise extends globalThis.Promise { +export declare class Promise extends globalThis.Promise { static async< Fn extends (this: This, ...args: Args) => any, This, diff --git a/packages/reactive-dict/reactive-dict.d.ts b/packages/reactive-dict/reactive-dict.d.ts index 78c671c4d3..b9a32ec4d8 100644 --- a/packages/reactive-dict/reactive-dict.d.ts +++ b/packages/reactive-dict/reactive-dict.d.ts @@ -1,6 +1,6 @@ import { EJSONable } from 'meteor/ejson'; -export class ReactiveDict { +export declare class ReactiveDict { /** * Constructor for a ReactiveDict, which represents a reactive dictionary of key/value pairs. * @param name When a name is passed, preserves contents across Hot Code Pushes diff --git a/packages/reactive-var/reactive-var.d.ts b/packages/reactive-var/reactive-var.d.ts index b47730aa51..f7d22c7559 100644 --- a/packages/reactive-var/reactive-var.d.ts +++ b/packages/reactive-var/reactive-var.d.ts @@ -1,4 +1,4 @@ -export var ReactiveVar: ReactiveVarStatic; +export declare var ReactiveVar: ReactiveVarStatic; export interface ReactiveVarStatic { /** diff --git a/packages/server-render/server-render.d.ts b/packages/server-render/server-render.d.ts index 9a16690cfd..8f55c0fe07 100644 --- a/packages/server-render/server-render.d.ts +++ b/packages/server-render/server-render.d.ts @@ -2,9 +2,9 @@ import * as http from 'http'; // NodeJS.ReadableStream only works on server. // HTMLElement only works on client. -type Content = string | Content[] | NodeJS.ReadableStream | HTMLElement; +export type Content = string | Content[] | NodeJS.ReadableStream | HTMLElement; -interface ClientSink { +export interface ClientSink { // Client and server. Only client appendToHead(html: Content): void; appendToBody(html: Content): void; @@ -19,7 +19,7 @@ interface ClientSink { getCookies(): { [key: string]: string }; } -interface ServerSink extends ClientSink { +export interface ServerSink extends ClientSink { // Server-only: request: http.IncomingMessage; arch: string; @@ -29,8 +29,8 @@ interface ServerSink extends ClientSink { maybeMadeChanges: boolean; } -type Sink = ClientSink | ServerSink; +export type Sink = ClientSink | ServerSink; -type Callback = (sink: Sink) => Promise | any; +export type Callback = (sink: Sink) => Promise | any; export function onPageLoad(callback: T): T; diff --git a/packages/service-configuration/service-configuration.d.ts b/packages/service-configuration/service-configuration.d.ts index 267f0ac7b2..3c18cfaac3 100644 --- a/packages/service-configuration/service-configuration.d.ts +++ b/packages/service-configuration/service-configuration.d.ts @@ -1,10 +1,10 @@ import { Mongo } from 'meteor/mongo'; -interface Configuration { +export interface Configuration { appId: string; secret: string; } -declare var ServiceConfiguration: { +export declare var ServiceConfiguration: { configurations: Mongo.Collection; }; diff --git a/packages/session/session.d.ts b/packages/session/session.d.ts index c32f863244..6e5afd4420 100644 --- a/packages/session/session.d.ts +++ b/packages/session/session.d.ts @@ -1,6 +1,6 @@ import { EJSONable } from 'meteor/ejson'; -declare namespace Session { +export namespace Session { /** * Test if a session variable is equal to a value. If inside a * reactive computation, invalidate the computation the next diff --git a/packages/tracker/tracker.d.ts b/packages/tracker/tracker.d.ts index cbd49a9b29..9ab6e0bdc5 100644 --- a/packages/tracker/tracker.d.ts +++ b/packages/tracker/tracker.d.ts @@ -1,7 +1,7 @@ /** * The namespace for Tracker-related methods. */ -export declare namespace Tracker { +export namespace Tracker { function Computation(): void; /** * A Computation object represents code that is repeatedly rerun diff --git a/packages/webapp/webapp.d.ts b/packages/webapp/webapp.d.ts index 2a3d9ecdfb..e13bb9ccf0 100644 --- a/packages/webapp/webapp.d.ts +++ b/packages/webapp/webapp.d.ts @@ -1,7 +1,7 @@ import * as http from 'http'; import * as connect from 'connect'; -declare interface StaticFiles { +export interface StaticFiles { [key: string]: { content?: string | undefined; absolutePath: string; @@ -12,7 +12,7 @@ declare interface StaticFiles { }; } -declare module WebApp { +export declare module WebApp { var defaultArch: string; var clientPrograms: { [key: string]: { @@ -41,7 +41,7 @@ declare module WebApp { function encodeRuntimeConfig(rtimeConfig: unknown): string; } -declare module WebAppInternals { +export declare module WebAppInternals { var NpmModules: { [key: string]: { version: string; From b0856ba1701c14f2a73ff0c34c7cca3c6195e47a Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sat, 1 Oct 2022 16:53:45 +0200 Subject: [PATCH 023/292] Fix things up Fix tests and move few things back. --- docs/history.md | 12 ++++ packages/accounts-base/accounts_common.js | 4 +- packages/accounts-base/accounts_server.js | 62 ++++++++++++++++++- packages/accounts-oauth/oauth_common.js | 19 ++++++ packages/accounts-oauth/oauth_server.js | 57 +---------------- .../promise/.npm/package/npm-shrinkwrap.json | 6 +- 6 files changed, 96 insertions(+), 64 deletions(-) diff --git a/docs/history.md b/docs/history.md index e20218863c..4ab2f2fc1f 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,15 @@ +## NEXT, 2022-XX-XX + +### Highlights + +#### Breaking Changes +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + +#### Migration Steps + +#### Meteor Version Release + + ## 2.7.3, 2022-05-31 #### Highlights diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index 01af031e48..dfd41f0e1e 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -230,6 +230,7 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { if (!VALID_CONFIG_KEYS.includes(key)) { + // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? throw new Meteor.Error(`Accounts.config: Invalid key: ${key}`); } }); @@ -396,9 +397,6 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes -// how long we wait before logging out clients when Meteor.logoutOtherClients is -// called -export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 7e8d18ee86..e9dbca524c 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,4 +1,5 @@ import crypto from 'crypto'; +import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -76,6 +77,9 @@ export class AccountsServer extends AccountsCommon { setExpireTokensInterval(this); this._validateLoginHook = new Hook({ bindEnvironment: false }); + this._validateNewUserHooks = [ + defaultValidateNewUserHook.bind(this) + ]; this._deleteSavedTokensForAllUsersOnStartup(); @@ -727,7 +731,8 @@ export class AccountsServer extends AccountsCommon { if (ServiceConfiguration.configurations.findOne({service: options.service})) throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) options.secret = OAuthEncryption.seal(options.secret); ServiceConfiguration.configurations.insert(options); @@ -755,8 +760,10 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + } }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1681,6 +1688,24 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; + +// OAuth service data is temporarily stored in the pending credentials +// collection during the oauth authentication process. Sensitive data +// such as access tokens are encrypted without the user id because +// we don't know the user id yet. We re-encrypt these fields with the +// user id included when storing the service data permanently in +// the users collection. +// +const pinEncryptedFieldsToUser = (serviceData, userId) => { + Object.keys(serviceData).forEach(key => { + let value = serviceData[key]; + if (OAuthEncryption?.isSealed(value)) + value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); + serviceData[key] = value; + }); +}; + // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { @@ -1689,6 +1714,37 @@ const defaultCreateUserHook = (options, user) => { return user; }; +// Validate new user's email or Google/Facebook/GitHub account's email +function defaultValidateNewUserHook(user) { + const domain = this._options.restrictCreationByEmailDomain; + if (!domain) { + return true; + } + + let emailIsGood = false; + if (user.emails && user.emails.length > 0) { + emailIsGood = user.emails.reduce( + (prev, email) => prev || this._testEmailDomain(email.address), false + ); + } else if (user.services && Object.values(user.services).length > 0) { + // Find any email of any service and check it + emailIsGood = Object.values(user.services).reduce( + (prev, service) => service.email && this._testEmailDomain(service.email), + false, + ); + } + + if (emailIsGood) { + return true; + } + + if (typeof domain === 'string') { + throw new Meteor.Error(403, `@${domain} email required`); + } else { + throw new Meteor.Error(403, "Email doesn't match the criteria."); + } +} + const setupUsersCollection = users => { /// /// RESTRICTING WRITES TO USER OBJECTS diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index 734570ecd8..bfb99b0a5d 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,5 +1,24 @@ import { Meteor } from 'meteor/meteor'; +// TODO get from account-base +// config option keys +const VALID_CONFIG_KEYS = [ + 'sendVerificationEmail', + 'forbidClientAccountCreation', + 'passwordEnrollTokenExpiration', + 'passwordEnrollTokenExpirationInDays', + 'restrictCreationByEmailDomain', + 'loginExpirationInDays', + 'loginExpiration', + 'passwordResetTokenExpirationInDays', + 'passwordResetTokenExpiration', + 'ambiguousErrorMessages', + 'bcryptRounds', + 'defaultFieldSelector', + 'loginTokenExpirationHours', + 'tokenSequenceLength', +]; + Accounts.oauth = {}; const services = {}; diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index cbf4909be4..f8d67eff25 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -62,61 +62,12 @@ Accounts.registerLoginHandler(options => { /// OAuth Encryption Support /// -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); + return OAuthEncryption?.keyIsLoaded(); }; -// OAuth service data is temporarily stored in the pending credentials -// collection during the oauth authentication process. Sensitive data -// such as access tokens are encrypted without the user id because -// we don't know the user id yet. We re-encrypt these fields with the -// user id included when storing the service data permanently in -// the users collection. -// -const pinEncryptedFieldsToUser = (serviceData, userId) => { - Object.keys(serviceData).forEach(key => { - let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) - value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); - serviceData[key] = value; - }); -}; - -// Validate new user's email or Google/Facebook/GitHub account's email -function defaultValidateNewUserHook(user) { - const domain = this._options.restrictCreationByEmailDomain; - if (!domain) { - return true; - } - - let emailIsGood = false; - if (user.emails && user.emails.length > 0) { - emailIsGood = user.emails.reduce( - (prev, email) => prev || this._testEmailDomain(email.address), false - ); - } else if (user.services && Object.values(user.services).length > 0) { - // Find any email of any service and check it - emailIsGood = Object.values(user.services).reduce( - (prev, service) => service.email && this._testEmailDomain(service.email), - false, - ); - } - - if (emailIsGood) { - return true; - } - - if (typeof domain === 'string') { - throw new Meteor.Error(403, `@${domain} email required`); - } else { - throw new Meteor.Error(403, "Email doesn't match the criteria."); - } -} - // Encrypt unencrypted login service secrets when oauth-encryption is // added. // @@ -131,10 +82,6 @@ Meteor.startup(() => { return; } - Accounts._validateNewUserHooks = [ - defaultValidateNewUserHook.bind(this) - ]; - const { ServiceConfiguration } = Package['service-configuration']; ServiceConfiguration.configurations.find({ diff --git a/packages/promise/.npm/package/npm-shrinkwrap.json b/packages/promise/.npm/package/npm-shrinkwrap.json index 1fc0ce2f37..28c929e19b 100644 --- a/packages/promise/.npm/package/npm-shrinkwrap.json +++ b/packages/promise/.npm/package/npm-shrinkwrap.json @@ -7,9 +7,9 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "meteor-promise": { - "version": "1.0.0-alpha.0", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-1.0.0-alpha.0.tgz", - "integrity": "sha512-f0WbzHSkAqzaQW+LSVhj/XES9dnxNqiKj/qd18Dj0Mt6znt0+f+PYFEsO9PkLdHnIJzvX1iHDjfHvLzpTNPymw==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==" }, "promise": { "version": "8.1.0", From 619645307620a5dc822da6bdade4992e4eb06d26 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sat, 1 Oct 2022 17:04:21 +0200 Subject: [PATCH 024/292] Conditionally use service-configuration and oauth-encryption --- packages/accounts-base/accounts_server.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index e9dbca524c..04e92ba9e0 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -727,15 +727,19 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - const { OAuthEncryption } = Package["oauth-encryption"] - if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) - options.secret = OAuthEncryption.seal(options.secret); + if (Package["oauth-encryption"]) { + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) + options.secret = OAuthEncryption.seal(options.secret); + } - ServiceConfiguration.configurations.insert(options); + ServiceConfiguration.configurations.insert(options); + } }; accounts._server.methods(methods); From ccf753cfaffaef2ff5183126e541fc6c6a585095 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 2 Oct 2022 13:27:44 +0200 Subject: [PATCH 025/292] Initial changes for TypeScript 7.6.4 --- docs/history.md | 12 +++++++++++- npm-packages/eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 ++-- npm-packages/meteor-babel/package.json | 4 ++-- packages/babel-compiler/package.js | 4 ++-- packages/ecmascript/package.js | 2 +- packages/typescript/package.js | 2 +- tools/static-assets/skel-typescript/package.json | 2 +- 8 files changed, 21 insertions(+), 11 deletions(-) diff --git a/docs/history.md b/docs/history.md index a820c10a28..a5ad79d759 100644 --- a/docs/history.md +++ b/docs/history.md @@ -4,6 +4,7 @@ * New MongoDB Package Async API. [PR](https://github.com/meteor/meteor/pull/12028) * Node update to [v14.20.0](https://nodejs.org/en/blog/release/v14.20.0/) as part of the [July 7th security release](https://nodejs.org/en/blog/vulnerability/july-2022-security-releases/) * Update MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12097) +* Upgrade TypeScript to 4.6.4 [PR]() #### Breaking Changes N/A @@ -36,7 +37,16 @@ Read our [Migration Guide](https://deploy-preview-12057--meteor-guide.netlify.ap - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). - +* `@meteorjs/babel@7.17.0` + - Upgrade TypeScript to `4.6.4` +* `babel-compiler@7.10.0` + - Upgrade TypeScript to `4.6.4` +* `ecmascript@0.16.3` + - Upgrade TypeScript to `4.6.4` +* `typescript@4.6.4` + - Upgrade TypeScript to `4.6.4` +* `eslint-plugin-meteor@7.4.0` + - Upgrade TypeScript to `4.6.4` #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 6f01831721..7845d884a3 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.3.0", + "version": "7.4.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 6d107c5bf8..cce457c339 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + typescript: "4.6.4", + "@meteorjs/babel": "7.17.0-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index a896f5a3a1..c24a7b364b 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.1", + "version": "7.17.0-beta.1", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.5.4" + "typescript": "^4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 40999ff266..3252e30e68 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.10.0' }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.1', + '@meteorjs/babel': '7.17.0-beta.1', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index eed53fefd0..04cb3abcf1 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.2', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/typescript/package.js b/packages/typescript/package.js index df071432b9..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.5.4', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index c7c54d5cc4..76457880f7 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.3" + "typescript": "^4.6.4" }, "meteor": { "mainModule": { From 337c0490b404232284c6fd61e3db4d66ed6069e0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:24:29 -0300 Subject: [PATCH 026/292] feat: updated-cli to add insecure --- tools/cli/commands.js | 19 ++++++++++++++++++- tools/cli/help.txt | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..366c63f9b9 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -522,7 +522,7 @@ export const AVAILABLE_SKELETONS = [ main.registerCommand({ name: 'create', - maxArgs: 1, + maxArgs: 2, options: { list: { type: Boolean }, example: { type: String }, @@ -539,6 +539,7 @@ main.registerCommand({ tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, + prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -790,6 +791,22 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { + + // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file + if ((/packages/).test(f)) { + + const prototypePackages = + () => + 'autopublish # Publish all data to the clients (for prototyping)\n' + + 'insecure # Allow all DB writes from clients (for prototyping)'; + + // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else + if (options.prototype) { + return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) + } else { + return Buffer.from(contents.toString().replace(/~prototype~/g, '')) + } + } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 13c612e9fd..3f561b0e44 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--prototype] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -191,6 +191,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. + --prototype Create a prototype app. >>> update From 401ff9c53fb3fec27158256a77825bae3ba42f1a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:25:04 -0300 Subject: [PATCH 027/292] feat: updated skels to use ~prototype~ flag --- tools/static-assets/skel-apollo/.meteor/packages | 2 +- tools/static-assets/skel-bare/.meteor/packages | 2 +- tools/static-assets/skel-blaze/.meteor/packages | 3 +-- tools/static-assets/skel-chakra-ui/.meteor/packages | 3 +-- tools/static-assets/skel-full/.meteor/packages | 1 + tools/static-assets/skel-minimal/.meteor/packages | 1 + tools/static-assets/skel-react/.meteor/packages | 3 +-- tools/static-assets/skel-solid/.meteor/packages | 3 +-- tools/static-assets/skel-svelte/.meteor/packages | 3 +-- tools/static-assets/skel-tailwind/.meteor/packages | 3 +-- tools/static-assets/skel-typescript/.meteor/packages | 3 +-- tools/static-assets/skel-vue/.meteor/packages | 1 + 12 files changed, 12 insertions(+), 16 deletions(-) diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index caa775ee6f..0addfea192 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page - +~prototype~ static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 62bedd2c00..294120e852 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library - +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index c2506a81ed..5e929125ff 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,8 +19,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 8f6a2ce1df..42dd3fa370 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,6 +11,7 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index 60ed1976b3..d0998cd7ad 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,3 +15,4 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server +~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index d6c05d244b..492b563f76 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 0e3c38c047..6880ea240a 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,8 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 83be6b3a62..ddfbe7a490 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -15,6 +15,7 @@ es5-shim # ECMAScript 5 compatibility for older browsers ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command +~prototype~ tracker # Dependency tracker to allow reactive callbacks static-html # Define static page content in .html files From b383b599cb8c6831b873056aff75ef60e8e5a234 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 13 Oct 2022 17:31:39 -0300 Subject: [PATCH 028/292] feat: added verification for packages --- tools/cli/commands.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 366c63f9b9..df3b1f2014 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -548,7 +548,13 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - + if (options.prototype) { + Console.error( + `The ${Console.command('--prototype')} option is not supported for packages.` + ); + Console.error(); + throw new main.ShowUsage; + } if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); From a72874fb2c055a7a479da2fbcfc3a626dc3bc707 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 14 Oct 2022 00:49:19 -0300 Subject: [PATCH 029/292] feat: adjusted maxArgs variable --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index df3b1f2014..424493d4ce 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -522,7 +522,7 @@ export const AVAILABLE_SKELETONS = [ main.registerCommand({ name: 'create', - maxArgs: 2, + maxArgs: 1, options: { list: { type: Boolean }, example: { type: String }, From 0eaf07c90804811936acf3c98e9d981c0a736a3b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 14 Oct 2022 10:43:38 -0300 Subject: [PATCH 030/292] feat: adjusted commetns --- tools/cli/commands.js | 2 +- tools/cli/help.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 424493d4ce..cf0481c90c 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -550,7 +550,7 @@ main.registerCommand({ var packageName = options.args[0]; if (options.prototype) { Console.error( - `The ${Console.command('--prototype')} option is not supported for packages.` + `The ${Console.command('--prototype')} option is no longer supported for packages.` ); Console.error(); throw new main.ShowUsage; diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 3f561b0e44..0b22ab3e77 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -191,7 +191,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. - --prototype Create a prototype app. + --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update From f6a264bff79ec256e2dfa1b07c3847826a6bf09f Mon Sep 17 00:00:00 2001 From: harryadel Date: Fri, 21 Oct 2022 14:01:21 +0200 Subject: [PATCH 031/292] [package-version-parser] Remove underscore --- .../package-version-parser/package-version-parser-tests.js | 4 ++-- packages/package-version-parser/package.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 855dc56057..ff82ae9086 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - _.each(invalidVersions, function (v) { + invalidVersions.forEach(function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - _.each(validVersions, function (v) { + validVersions.forEach(function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4c6ff0dc62..118b9c3f11 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -15,6 +15,6 @@ Package.onUse(function (api) { Package.onTest(function (api) { api.use('package-version-parser'); - api.use(['tinytest', 'underscore']); + api.use(['tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); From 5b974986990295c558c7e5dd87766079c3fd5890 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 24 Oct 2022 17:32:46 +0200 Subject: [PATCH 032/292] Fix mistake in conflict resolution --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 36788500a3..21213fed72 100644 --- a/docs/history.md +++ b/docs/history.md @@ -13,7 +13,7 @@ #### Highlights * New MongoDB Package Async API. [PR](https://github.com/meteor/meteor/pull/12028) -* Node update to [v14.20.1](https://nodejs.org/en/blog/releabefore releasing it I will do a check where it needs to be updated thx for bringing that outse/v14.20.1/) as part of the [September 22nd security release](https://nodejs.org/en/blog/vulnerability/september-2022-security-releases/) +* Node update to [v14.20.1](https://nodejs.org/en/blog/release/v14.20.1/) as part of the [September 22nd security release](https://nodejs.org/en/blog/vulnerability/september-2022-security-releases/) * Update MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12097) * Meteor.callAsync method. [PR](https://github.com/meteor/meteor/pull/12196) * Added new Chakra-ui Skeleton. [PR](https://github.com/meteor/meteor/pull/12181) From 33015f00d1d00383012a35cb0e46bd84c3338e1d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 24 Oct 2022 16:22:03 -0300 Subject: [PATCH 033/292] feat: added userAsync for accounts base --- packages/accounts-base/accounts_client.js | 5 +++++ packages/accounts-base/accounts_common.js | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index cfded81faa..842e927ad9 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,6 +798,11 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); + // TODO: the code above needs to be changed to Meteor.userAsync() when we have + // a way to make it reactive using async. + // Template.registerHelper('currentUserAsync', + // async () => await Meteor.userAsync()); + /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..95a84de0cf 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -170,6 +170,18 @@ export class AccountsCommon { : null; } + /** + * @summary Get the current user record, or `null` if no user is logged in. + * @locus Anywhere + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ + async userAsync(options) { + const userId = this.userId(); + return userId + ? await this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + : null; + } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -418,6 +430,15 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); +/** + * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. + * @locus Anywhere but publish functions + * @importFromPackage meteor + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ +Meteor.userAsync = options => Accounts.userAsync(options); + // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires From b99c29a3b92165ef503b77324f69fab203d9238f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 24 Oct 2022 16:22:18 -0300 Subject: [PATCH 034/292] tests: added tests for Meteor.userAsync(); --- .../accounts-base/accounts_client_tests.js | 47 +++++++++++++++- packages/accounts-base/accounts_tests.js | 56 +++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 9ebb7d4b9f..ccf0aa510a 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,6 +94,20 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.loggingIn() is false after login has completed', + (test, done) => { + logoutAndCreateUser(test, done, () => { + // Login then verify loggingIn is false after login has completed + Meteor.loginWithPassword(username, password, async () => { + test.isTrue(await Meteor.userAsync()); + test.isFalse(Meteor.loggingIn()); + removeTestUser(done); + }); + }); + } +); + Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -150,7 +164,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user obeys explicit and default field selectors', + 'accounts - Meteor.user() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -178,6 +192,37 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', + (test, done) => { + logoutAndCreateUser(test, done, () => { + Meteor.loginWithPassword(username, password, () => { + // by default, all fields should be returned + Meteor.userAsync().then(user => { + test.equal( user.profile[excludeField], excludeValue); + }); + + // this time we want to exclude the default fields + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({defaultFieldSelector: {['profile.'+defaultExcludeField]: 0}}); + Meteor.userAsync().then(async user => { + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + }) + // this time we only want certain fields... + Meteor.userAsync({fields: {'profile.name': 1}}).then(user => { + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); + }); + Accounts._options = options; + removeTestUser(done); + }); + }); + } +); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index de870e0f81..7c06621f79 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,6 +604,62 @@ Tinytest.add( } ); + +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', + async test => { + const ignoreFieldName = "bigArray"; + const customField = "customField"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + + // stub Meteor.userId() so it works outside methods and returns the correct user: + const origAccountsUserId = Accounts.userId; + Accounts.userId = () => userId; + + Accounts._options = {}; + + // test the field is included by default + let user = await Meteor.userAsync(); + test.isNotUndefined(user[ignoreFieldName], 'included by default'); + + // test the field is excluded + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); + user = await Meteor.userAsync(); + test.isUndefined(user[ignoreFieldName], 'excluded'); + user = Meteor.user({}); + test.isUndefined(user[ignoreFieldName], 'excluded {}'); + + // test the field can still be retrieved if required + user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); + test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); + test.isUndefined(user.username, 'field can be retrieved username'); + + // test a combined negative field specifier + user = await Meteor.userAsync({ fields: { username: 0 } }); + test.isUndefined(user[ignoreFieldName], 'combined field selector'); + test.isUndefined(user.username, 'combined field selector username'); + + // test an explicit request for the full user object + user = await Meteor.userAsync({ fields: {} }); + test.isNotUndefined(user[ignoreFieldName], 'full selector'); + test.isNotUndefined(user.username, 'full selector username'); + + Accounts._options = {}; + + // Test that a custom field gets retrieved properly + Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); + user = await Meteor.userAsync(); + test.isNotUndefined(user[customField]); + test.isUndefined(user.username); + test.isUndefined(user[ignoreFieldName]); + + Accounts._options = options; + Accounts.userId = origAccountsUserId; + } +); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { From d24bf3a797bc35b2f40cdf0884e33bd16c4d55ca Mon Sep 17 00:00:00 2001 From: denihs Date: Tue, 25 Oct 2022 09:23:27 -0300 Subject: [PATCH 035/292] In the client, don't wait if the stub doesn't return a promise --- packages/ddp-client/common/livedata_connection.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/ddp-client/common/livedata_connection.js b/packages/ddp-client/common/livedata_connection.js index c30ff6f48d..868201c43d 100644 --- a/packages/ddp-client/common/livedata_connection.js +++ b/packages/ddp-client/common/livedata_connection.js @@ -695,7 +695,14 @@ export class Connection { invocation ); try { - stubOptions.stubReturnValue = await stubInvocation(); + const resultOrThenable = stubInvocation(); + const isThenable = + resultOrThenable && typeof resultOrThenable.then === 'function'; + if (isThenable) { + stubOptions.stubReturnValue = await resultOrThenable; + } else { + stubOptions.stubReturnValue = resultOrThenable; + } } finally { DDP._CurrentMethodInvocation._set(currentContext); } From 140069c306bb3a584f94d18d12cccbc35e3ef186 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 25 Oct 2022 14:34:36 -0300 Subject: [PATCH 036/292] chore: adressed comments --- packages/accounts-base/accounts_common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index 95a84de0cf..8f9d6a0c51 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -179,7 +179,7 @@ export class AccountsCommon { async userAsync(options) { const userId = this.userId(); return userId - ? await this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) : null; } // Set up config for the accounts system. Call this on both the client From 3723bd71a147bc064ed4e7c1bb19496364cfe4a7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:07:46 -0300 Subject: [PATCH 037/292] tests: updated tests as commented --- .../accounts-base/accounts_client_tests.js | 33 ++++++++++--------- packages/accounts-base/accounts_tests.js | 2 +- packages/accounts-password/password_client.js | 6 ++-- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index ccf0aa510a..880a71e4fe 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -100,8 +100,8 @@ Tinytest.addAsync( logoutAndCreateUser(test, done, () => { // Login then verify loggingIn is false after login has completed Meteor.loginWithPassword(username, password, async () => { - test.isTrue(await Meteor.userAsync()); test.isFalse(Meteor.loggingIn()); + test.isTrue(await Meteor.userAsync()); removeTestUser(done); }); }); @@ -196,27 +196,28 @@ Tinytest.addAsync( 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { - Meteor.loginWithPassword(username, password, () => { + Meteor.loginWithPassword(username, password, async () => { // by default, all fields should be returned - Meteor.userAsync().then(user => { - test.equal( user.profile[excludeField], excludeValue); - }); + let user; + user = await Meteor.userAsync(); + test.equal(user.profile[excludeField], excludeValue); // this time we want to exclude the default fields const options = Accounts._options; Accounts._options = {}; - Accounts.config({defaultFieldSelector: {['profile.'+defaultExcludeField]: 0}}); - Meteor.userAsync().then(async user => { - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile[excludeField], excludeValue); - test.equal(user.profile.name, username); - }) + Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); + + user = await Meteor.userAsync(); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + // this time we only want certain fields... - Meteor.userAsync({fields: {'profile.name': 1}}).then(user => { - test.isUndefined(user.profile[excludeField]); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile.name, username); - }); + + user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); Accounts._options = options; removeTestUser(done); }); diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 7c06621f79..797bd758f0 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -629,7 +629,7 @@ Tinytest.addAsync( Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); user = await Meteor.userAsync(); test.isUndefined(user[ignoreFieldName], 'excluded'); - user = Meteor.user({}); + user = await Meteor.userAsync({}); test.isUndefined(user[ignoreFieldName], 'excluded {}'); // test the field can still be retrieved if required diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 5d1279782b..50b3329cb9 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -21,11 +21,13 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { code, }, ], - userCallback: (error, result) => { + userCallback: async (error, result) => { if (error) { reportError(error, callback); } else { - callback && callback(); + const isAsync = callback && callback.constructor.name === 'AsyncFunction'; + if (isAsync) callback && await callback(); + else callback && callback(); } }, }); From 070445050bf7dbd2e86820f24be1dcd175d9bcf7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:15:36 -0300 Subject: [PATCH 038/292] chore: created reportErrorAsync --- packages/accounts-password/password_client.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 50b3329cb9..735d58e03a 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,12 +7,18 @@ const reportError = (error, callback) => { } }; +const reportErrorAsync = async (error, callback) => { + if (callback) { + await callback(error); + } else { + throw error; + } +}; const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; - Accounts.callLoginMethod({ methodArguments: [ { @@ -22,10 +28,11 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { }, ], userCallback: async (error, result) => { + const isAsync = callback && callback.constructor.name === 'AsyncFunction'; if (error) { - reportError(error, callback); + if (isAsync) await reportErrorAsync(error, callback); + else reportError(error, callback); } else { - const isAsync = callback && callback.constructor.name === 'AsyncFunction'; if (isAsync) callback && await callback(); else callback && callback(); } From e3c6b0159891769a4ba26db6075416b249c50e30 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 26 Oct 2022 10:46:28 -0300 Subject: [PATCH 039/292] chore: remove async code --- packages/accounts-password/password_client.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 735d58e03a..30d3b49450 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,14 +7,6 @@ const reportError = (error, callback) => { } }; -const reportErrorAsync = async (error, callback) => { - if (callback) { - await callback(error); - } else { - throw error; - } -}; - const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; @@ -27,14 +19,11 @@ const internalLoginWithPassword = ({ selector, password, code, callback }) => { code, }, ], - userCallback: async (error, result) => { - const isAsync = callback && callback.constructor.name === 'AsyncFunction'; + userCallback: (error, result) => { if (error) { - if (isAsync) await reportErrorAsync(error, callback); - else reportError(error, callback); + reportError(error, callback); } else { - if (isAsync) callback && await callback(); - else callback && callback(); + callback && callback(); } }, }); From 3f298cb0eda936233cf7252ba1eb0a70c7ef9ba1 Mon Sep 17 00:00:00 2001 From: flaura Date: Wed, 26 Oct 2022 15:31:48 -0400 Subject: [PATCH 040/292] Update/remove dead links in history docs --- docs/history.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/history.md b/docs/history.md index 7c1bceec6a..435449bd1b 100644 --- a/docs/history.md +++ b/docs/history.md @@ -670,7 +670,7 @@ This version should be ignored. Proceed to 2.5.5 above. * Typescript updated to [v4.3.5](https://github.com/Microsoft/TypeScript/releases/tag/v4.3.5) * Email package now allows setting `Email.customTransport` to override sending method. * Use `createIndex` instead of `_ensureIndex` to align with new MongoDB naming. -* Apollo skeleton has been upgraded for [Apollo server v3](https://github.com/apollographql/apollo-server/blob/main/CHANGELOG.md#v300) +* Apollo skeleton has been upgraded for [Apollo server v3](https://github.com/apollographql/apollo-server/blob/main/CHANGELOG_historical.md#v300) * `reify` has been updated to v0.22.2 which reduces the overhead of `import` statements and some uses of `export ... from`, especially when a module is imported a large number of times or re-exports a large number of exports from other modules. PRs [1](https://github.com/benjamn/reify/pull/246), [2](https://github.com/benjamn/reify/pull/291) * Meteor NPM installer is [now available for all platforms](https://github.com/meteor/meteor/pull/11590). * DDP server now allows you to set publication strategies for your publications to control mergebox behavior @@ -1040,7 +1040,7 @@ This version should be ignored. Proceed to 2.5.5 above. - The undocumented environment variable `DDP_DEFAULT_CONNECTION_URL` behavior has changed. Setting `DDP_DEFAULT_CONNECTION_URL` when running the server (development: `meteor run` or production: `node main.js`) sets the default DDP server value for meteor. But this did not work for `cordova` apps. Now you can define the `cordova` app default DDP server value by setting `DDP_DEFAULT_CONNECTION_URL` when building (`meteor build`). - Skeletons dependencies updated to latest version - Svelte skeleton now has HMR - - New deploy option: `--build-only`. Helpful if you want to build first and after some validations proceeding with the upload and deploy. [Read more](https://cloud-guide.meteor.com/deploy-guide.html#cache-only) + - New deploy option: `--build-only`. Helpful if you want to build first and after some validations proceeding with the upload and deploy. - Improved watched system to properly rebuild `client` even when a file is outside of `client` or `imports` folders. See [PR](https://github.com/meteor/meteor/pull/11474) for details. - Fix an issue when `App.appendToConfig` crashed Cordova build. - Reify compiler now uses cache in runtime. [Read more](https://github.com/meteor/meteor/pull/11400) @@ -1528,7 +1528,7 @@ N/A * `meteor create --vue` is now available thanks to [@chris-visser](https://github.com/chris-visser). PR [#11086](https://github.com/meteor/meteor/pull/11086) -* `--cache-build` option is now available on `meteor deploy` command and you can use it safely all the time if you are using a Git repository to run your deploy. This is helpful if your upload is failing then you can retry just the upload and also if you deploy the same bundle to multiple environments. [Read more](https://cloud-guide.meteor.com/deploy-guide.html#cache-build). +* `--cache-build` option is now available on `meteor deploy` command and you can use it safely all the time if you are using a Git repository to run your deploy. This is helpful if your upload is failing then you can retry just the upload and also if you deploy the same bundle to multiple environments. * Multiple optimizations in build performance, many of them for Windows thanks to [@zodern](https://github.com/zodern). PRs [#10838](https://github.com/meteor/meteor/pull/10838), [#11114](https://github.com/meteor/meteor/pull/11114), [#11115](https://github.com/meteor/meteor/pull/11115), [#11102](https://github.com/meteor/meteor/pull/11102), [#10839](https://github.com/meteor/meteor/pull/10839) From 03adee521a6a96253b91f72679e62a50f66b066c Mon Sep 17 00:00:00 2001 From: Vlad Lasky Date: Thu, 27 Oct 2022 18:36:11 +1100 Subject: [PATCH 041/292] str.match() returns an array on success which is not coerced into boolean true. An explicit not null check is now performed instead. --- packages/mongo-id/id.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo-id/id.js b/packages/mongo-id/id.js index b0bf43dd37..59a571cf88 100644 --- a/packages/mongo-id/id.js +++ b/packages/mongo-id/id.js @@ -3,7 +3,7 @@ import { Random } from 'meteor/random'; const MongoID = {}; -MongoID._looksLikeObjectID = str => str.length === 24 && str.match(/^[0-9a-f]*$/); +MongoID._looksLikeObjectID = str => str.length === 24 && (str.match(/^[0-9a-f]*$/) != null); MongoID.ObjectID = class ObjectID { constructor (hexString) { From 02b5397694794850a3db05de96985251396df0a6 Mon Sep 17 00:00:00 2001 From: Vlad Lasky Date: Thu, 27 Oct 2022 23:22:53 +1100 Subject: [PATCH 042/292] Update packages/mongo-id/id.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Radosław Miernik --- packages/mongo-id/id.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo-id/id.js b/packages/mongo-id/id.js index 59a571cf88..142a761a0d 100644 --- a/packages/mongo-id/id.js +++ b/packages/mongo-id/id.js @@ -3,7 +3,7 @@ import { Random } from 'meteor/random'; const MongoID = {}; -MongoID._looksLikeObjectID = str => str.length === 24 && (str.match(/^[0-9a-f]*$/) != null); +MongoID._looksLikeObjectID = str => str.length === 24 && /^[0-9a-f]*$/.test(str); MongoID.ObjectID = class ObjectID { constructor (hexString) { From 971f85e8a61d82126ada28618c787b79dcf56180 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 27 Oct 2022 10:59:57 -0300 Subject: [PATCH 043/292] Meteor version to 2.8.1-beta.0 :comet: --- docs/history.md | 1 + packages/browser-policy-framing/package.js | 2 +- packages/browser-policy/package.js | 2 +- packages/diff-sequence/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/ejson/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/facts-ui/package.js | 2 +- packages/fetch/package.js | 2 +- packages/geojson-utils/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/modules-runtime-hot/package.js | 2 +- packages/modules-runtime/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/webapp-hashing/package.js | 2 +- .../admin/meteor-release-experimental.json | 2 +- scripts/admin/update-semver/index.js | 46 +++++++++++++++---- 20 files changed, 56 insertions(+), 27 deletions(-) diff --git a/docs/history.md b/docs/history.md index c748fda441..6fce5aa79f 100644 --- a/docs/history.md +++ b/docs/history.md @@ -11,6 +11,7 @@ - Updated default version of Facebook GraphAPI to v15 + ## v2.8, 2022-10-19 #### Highlights diff --git a/packages/browser-policy-framing/package.js b/packages/browser-policy-framing/package.js index 7dc9041568..06ebdfe2e6 100644 --- a/packages/browser-policy-framing/package.js +++ b/packages/browser-policy-framing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Restrict which websites can frame your app", - version: "1.1.0" + version: '1.1.1-beta.0' }); Package.onUse(function (api) { diff --git a/packages/browser-policy/package.js b/packages/browser-policy/package.js index a44f8ba6b4..aa3ab9dd80 100644 --- a/packages/browser-policy/package.js +++ b/packages/browser-policy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure security policies enforced by the browser", - version: "1.1.0" + version: '1.1.1-beta.0' }); Package.onUse(function (api) { diff --git a/packages/diff-sequence/package.js b/packages/diff-sequence/package.js index ff143f3e8a..e81b548ccf 100644 --- a/packages/diff-sequence/package.js +++ b/packages/diff-sequence/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "An implementation of a diff algorithm on arrays and objects.", - version: '1.1.1', + version: '1.1.2-beta.0', documentation: null }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 37378b5163..a7db21c514 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.2', + version: '0.16.3-beta.0', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 654f16c568..24754970e9 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.1.2' + version: '1.1.3-beta.0' }); Package.onUse(function onUse(api) { diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 67536065cb..db269c6ef9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: "1.11.0" + version: '1.11.1-beta.0' }); Package.onUse(api => { diff --git a/packages/facts-ui/package.js b/packages/facts-ui/package.js index 5f367eb09d..7267d44a8e 100644 --- a/packages/facts-ui/package.js +++ b/packages/facts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Display internal app statistics", - version: '1.0.0' + version: '1.0.1-beta.0' }); Package.onUse(function (api) { diff --git a/packages/fetch/package.js b/packages/fetch/package.js index dcba22f913..b56e1265b8 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: "0.1.1", + version: '0.1.2-beta.0', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/geojson-utils/package.js b/packages/geojson-utils/package.js index 052cdc64bc..7bb6607532 100644 --- a/packages/geojson-utils/package.js +++ b/packages/geojson-utils/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GeoJSON utility functions (from https://github.com/maxogden/geojson-js-utils)', - version: '1.0.10' + version: '1.0.11-beta.0' }); Package.onUse(function (api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 374140976c..68565fa34c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.0', + version: '2.8.1-beta.0', }); Package.includeTool(); diff --git a/packages/modules-runtime-hot/package.js b/packages/modules-runtime-hot/package.js index 6a932eb21b..4d303badb3 100644 --- a/packages/modules-runtime-hot/package.js +++ b/packages/modules-runtime-hot/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modules-runtime-hot', - version: '0.14.0', + version: '0.14.1-beta.0', summary: 'Patches modules-runtime to support Hot Module Replacement', git: 'https://github.com/benjamn/install', documentation: 'README.md', diff --git a/packages/modules-runtime/package.js b/packages/modules-runtime/package.js index f7ba69f134..66b80c028e 100644 --- a/packages/modules-runtime/package.js +++ b/packages/modules-runtime/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules-runtime", - version: "0.13.0", + version: '0.13.2-beta.0', summary: "CommonJS module system", git: "https://github.com/benjamn/install", documentation: "README.md" diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f31b7efe27..0ec175d219 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.0' + version: '1.16.1-beta.0' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 2222c52f7a..25a4b4ecb6 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: "4.11.0", + version: '4.11.0-beta.0', documentation: null }); diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 7bc88d5cf7..fb5e49cf72 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.0', + version: '1.3.1-beta.0', documentation: null }); diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 34e0d8bff8..27eb65c32f 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: "1.3.0" + version: '1.3.1-beta.0' }); Package.onUse(function(api) { diff --git a/packages/webapp-hashing/package.js b/packages/webapp-hashing/package.js index 4098a5b937..088b184ffe 100644 --- a/packages/webapp-hashing/package.js +++ b/packages/webapp-hashing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Used internally by WebApp. Knows how to hash programs from manifests.", - version: "1.1.0" + version: '1.1.1-beta.0' }); Package.onUse(function(api) { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 73b31948b6..2295f3302d 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8-rc.0", + "version": "2.8.1-beta.0", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/scripts/admin/update-semver/index.js b/scripts/admin/update-semver/index.js index bc903a43f1..3024508bb1 100644 --- a/scripts/admin/update-semver/index.js +++ b/scripts/admin/update-semver/index.js @@ -26,24 +26,49 @@ const runCommand = async (command) => { }) } +/** + * + * @returns {Promise} + */ async function getPackages() { return await runCommand("./get-diff.sh"); } +async function getFile(path) { + try { + const data = await fs.promises.readFile(path, 'utf8'); + return [data, null] + } catch (e) { + console.error(e); + return ['', e]; + } + +} + async function main() { + /** + * @type {string[]} + */ let args = process.argv.slice(2); - if (args[0] === '@auto') { - const packages = await getPackages(); + if (args[0].startsWith('@auto')) { + const [_, type] = args[0].split('.'); + // List of packages that for some reason are not in the diff. + // If there is a change in one of them please do not forget + // to add it to the list. + // List: + // ddp-common + + const p = await getPackages(); + const packages = p.concat(`packages/meteor-tool.${ type }`); args = packages .split('/') - .filter((packageName) => packageName !== 'packages' && packageName !== "\npackages" && packageName !== "\n"); + .filter((packageName) => packageName !== 'packages' && packageName !== "\npackages" && packageName !== "\n") + .map((packageName) => `${ packageName }.${ type }`); } + /** - * @type {{ - * name: string, - * version: string, - * }[]} + * @type {{release, name: string|null}[]} */ const packages = args.map(arg => { const [name, release] = arg.split('.'); @@ -51,8 +76,9 @@ async function main() { }); for (const { name, release } of packages) { const filePath = `../../../packages/${ name }/package.js`; - const code = await fs.promises.readFile(filePath, 'utf8'); - + const [code, err] = await getFile(filePath); + // if there is an error reading the file, we will skip it. + if (err) continue; for (const line of code.split(/\n/)) { // should only run on lines that have a version if (!line.includes('version')) continue; @@ -83,6 +109,8 @@ async function main() { await fs.promises.writeFile(filePath, newCode); } } + console.log('Done!'); + if (!args[0].startsWith('@auto')) console.log('Do not forget to update meteor-tool'); } main(); From b61729248e0853c125b1f3f368e5e2aaaa55f8fb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 27 Oct 2022 11:06:21 -0300 Subject: [PATCH 044/292] Meteor version to 2.8.1-beta.0 :comet: --- packages/ddp-client/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 0cdc77a953..7b9eef3eb6 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.0', + version: '2.6.1-beta.0', documentation: null }); From 7a168776b444a48f18c9ba5ce72363360e59e678 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Thu, 27 Oct 2022 20:02:53 +0200 Subject: [PATCH 045/292] Update history --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 106ec75436..4eb43cceea 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,6 +1,7 @@ ## 2.8.1, Unreleased #### Highlights +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) #### Breaking Changes @@ -11,7 +12,6 @@ - Updated default version of Facebook GraphAPI to v15 - ## v2.8, 2022-10-19 #### Highlights From b07df4d06c7fbaca533bc32b8e7a0bc709feda16 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 28 Oct 2022 06:28:34 -0300 Subject: [PATCH 046/292] fix: triong to make release tarballs --- scripts/make-release-tarballs.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/make-release-tarballs.sh b/scripts/make-release-tarballs.sh index 6b52e9c5e7..3b569e863f 100755 --- a/scripts/make-release-tarballs.sh +++ b/scripts/make-release-tarballs.sh @@ -15,13 +15,13 @@ echo "VERSION = $VERSION" git fetch origin && git checkout release/METEOR@$VERSION && git reset --hard origin/$BRANCH_NAME && git clean -df && - ./meteor admin make-bootstrap-tarballs --target-arch os.windows.x86_64 $VERSION win64 && - ./meteor admin make-bootstrap-tarballs --target-arch os.linux.x86_64 $VERSION linux64 && - ./meteor admin make-bootstrap-tarballs --target-arch os.osx.x86_64 $VERSION osx && - ./meteor admin make-bootstrap-tarballs --target-arch os.osx.arm64 $VERSION osx && aws s3 mb s3://com.meteor.static/packages-bootstrap/$VERSION/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.windows.x86_64 $VERSION win64 && aws s3 cp --acl public-read win64/meteor-bootstrap-os.windows.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.linux.x86_64 $VERSION linux64 && aws s3 cp --acl public-read linux64/meteor-bootstrap-os.linux.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.osx.x86_64 $VERSION osx && aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.osx.arm64 $VERSION osx && aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.arm64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && aws s3 ls s3://com.meteor.static/packages-bootstrap/$VERSION From 5fda7b30cdda6b8a646641bf0bbeeb6bc8e11d6f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 28 Oct 2022 06:30:59 -0300 Subject: [PATCH 047/292] fix: orderring in tarballs script --- scripts/make-release-tarballs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/make-release-tarballs.sh b/scripts/make-release-tarballs.sh index 3b569e863f..70b90f5109 100755 --- a/scripts/make-release-tarballs.sh +++ b/scripts/make-release-tarballs.sh @@ -15,7 +15,6 @@ echo "VERSION = $VERSION" git fetch origin && git checkout release/METEOR@$VERSION && git reset --hard origin/$BRANCH_NAME && git clean -df && - aws s3 mb s3://com.meteor.static/packages-bootstrap/$VERSION/ && ./meteor admin make-bootstrap-tarballs --target-arch os.windows.x86_64 $VERSION win64 && aws s3 cp --acl public-read win64/meteor-bootstrap-os.windows.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && ./meteor admin make-bootstrap-tarballs --target-arch os.linux.x86_64 $VERSION linux64 && @@ -24,4 +23,5 @@ git fetch origin && git checkout release/METEOR@$VERSION && aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && ./meteor admin make-bootstrap-tarballs --target-arch os.osx.arm64 $VERSION osx && aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.arm64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && + aws s3 mb s3://com.meteor.static/packages-bootstrap/$VERSION/ && aws s3 ls s3://com.meteor.static/packages-bootstrap/$VERSION From d92bf473c2313e76e07b55af38c0938337404d67 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 28 Oct 2022 06:32:40 -0300 Subject: [PATCH 048/292] fix: string concatenation in script --- scripts/make-release-tarballs.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/make-release-tarballs.sh b/scripts/make-release-tarballs.sh index 70b90f5109..562b67823c 100755 --- a/scripts/make-release-tarballs.sh +++ b/scripts/make-release-tarballs.sh @@ -12,16 +12,16 @@ done echo "BRANCH_NAME = $BRANCH_NAME" echo "VERSION = $VERSION" -git fetch origin && git checkout release/METEOR@$VERSION && - git reset --hard origin/$BRANCH_NAME && +git fetch origin && git checkout release/METEOR@"$VERSION" && + git reset --hard origin/"$BRANCH_NAME" && git clean -df && - ./meteor admin make-bootstrap-tarballs --target-arch os.windows.x86_64 $VERSION win64 && - aws s3 cp --acl public-read win64/meteor-bootstrap-os.windows.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && - ./meteor admin make-bootstrap-tarballs --target-arch os.linux.x86_64 $VERSION linux64 && - aws s3 cp --acl public-read linux64/meteor-bootstrap-os.linux.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && - ./meteor admin make-bootstrap-tarballs --target-arch os.osx.x86_64 $VERSION osx && - aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && - ./meteor admin make-bootstrap-tarballs --target-arch os.osx.arm64 $VERSION osx && - aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.arm64.tar.gz s3://com.meteor.static/packages-bootstrap/$VERSION/ && - aws s3 mb s3://com.meteor.static/packages-bootstrap/$VERSION/ && - aws s3 ls s3://com.meteor.static/packages-bootstrap/$VERSION + ./meteor admin make-bootstrap-tarballs --target-arch os.windows.x86_64 "$VERSION" win64 && + aws s3 cp --acl public-read win64/meteor-bootstrap-os.windows.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/"$VERSION"/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.linux.x86_64 "$VERSION" linux64 && + aws s3 cp --acl public-read linux64/meteor-bootstrap-os.linux.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/"$VERSION"/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.osx.x86_64 "$VERSION" osx && + aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.x86_64.tar.gz s3://com.meteor.static/packages-bootstrap/"$VERSION"/ && + ./meteor admin make-bootstrap-tarballs --target-arch os.osx.arm64 "$VERSION" osx && + aws s3 cp --acl public-read osx/meteor-bootstrap-os.osx.arm64.tar.gz s3://com.meteor.static/packages-bootstrap/"$VERSION"/ && + aws s3 mb s3://com.meteor.static/packages-bootstrap/"$VERSION"/ && + aws s3 ls s3://com.meteor.static/packages-bootstrap/"$VERSION" From 374073a33d02c0d1715f36bf90d4d8ad690c191b Mon Sep 17 00:00:00 2001 From: flaura Date: Sun, 30 Oct 2022 13:29:28 -0400 Subject: [PATCH 049/292] Update links for deployment options --- docs/history.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/history.md b/docs/history.md index 435449bd1b..596c237095 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1040,7 +1040,7 @@ This version should be ignored. Proceed to 2.5.5 above. - The undocumented environment variable `DDP_DEFAULT_CONNECTION_URL` behavior has changed. Setting `DDP_DEFAULT_CONNECTION_URL` when running the server (development: `meteor run` or production: `node main.js`) sets the default DDP server value for meteor. But this did not work for `cordova` apps. Now you can define the `cordova` app default DDP server value by setting `DDP_DEFAULT_CONNECTION_URL` when building (`meteor build`). - Skeletons dependencies updated to latest version - Svelte skeleton now has HMR - - New deploy option: `--build-only`. Helpful if you want to build first and after some validations proceeding with the upload and deploy. + - New deploy option: `--build-only`. Helpful if you want to build first and after some validations proceeding with the upload and deploy. [Read more](https://galaxy-guide.meteor.com/deploy-command-line.html#cache-only) - Improved watched system to properly rebuild `client` even when a file is outside of `client` or `imports` folders. See [PR](https://github.com/meteor/meteor/pull/11474) for details. - Fix an issue when `App.appendToConfig` crashed Cordova build. - Reify compiler now uses cache in runtime. [Read more](https://github.com/meteor/meteor/pull/11400) @@ -1528,7 +1528,7 @@ N/A * `meteor create --vue` is now available thanks to [@chris-visser](https://github.com/chris-visser). PR [#11086](https://github.com/meteor/meteor/pull/11086) -* `--cache-build` option is now available on `meteor deploy` command and you can use it safely all the time if you are using a Git repository to run your deploy. This is helpful if your upload is failing then you can retry just the upload and also if you deploy the same bundle to multiple environments. +* `--cache-build` option is now available on `meteor deploy` command and you can use it safely all the time if you are using a Git repository to run your deploy. This is helpful if your upload is failing then you can retry just the upload and also if you deploy the same bundle to multiple environments. [Read more](https://galaxy-guide.meteor.com/deploy-command-line.html#cache-build) * Multiple optimizations in build performance, many of them for Windows thanks to [@zodern](https://github.com/zodern). PRs [#10838](https://github.com/meteor/meteor/pull/10838), [#11114](https://github.com/meteor/meteor/pull/11114), [#11115](https://github.com/meteor/meteor/pull/11115), [#11102](https://github.com/meteor/meteor/pull/11102), [#10839](https://github.com/meteor/meteor/pull/10839) From 2a7d05c094bf03d2e99e8c6d928970b63133b0c4 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:18:48 +0200 Subject: [PATCH 050/292] build: harden npm-meteor-babel.yml permissions Signed-off-by: Alex --- .github/workflows/npm-meteor-babel.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-meteor-babel.yml b/.github/workflows/npm-meteor-babel.yml index 6a20fb61b2..c2a260b3ae 100644 --- a/.github/workflows/npm-meteor-babel.yml +++ b/.github/workflows/npm-meteor-babel.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/meteor-babel/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 7a986c3e6445b524d09ddb87d9b4ac0883881d69 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:18:58 +0200 Subject: [PATCH 051/292] build: harden npm-meteor-promise.yml permissions Signed-off-by: Alex --- .github/workflows/npm-meteor-promise.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-meteor-promise.yml b/.github/workflows/npm-meteor-promise.yml index 247a5a76c2..6351c718fd 100644 --- a/.github/workflows/npm-meteor-promise.yml +++ b/.github/workflows/npm-meteor-promise.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/meteor-promise/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 66f3f9a85daf73e36dc311b77e39feac39db6d93 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:19:58 +0200 Subject: [PATCH 052/292] build: harden labeler.yml permissions Signed-off-by: Alex --- .github/workflows/labeler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 88603611be..1861d20d9e 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -9,6 +9,10 @@ name: Labeler on: - pull_request_target +permissions: + contents: read # to determine modified files (actions/labeler) + pull-requests: write # to add labels to PRs (actions/labeler) + jobs: label: runs-on: ubuntu-latest From a7f176bd65fab797f60795f32a3867a83d5eb5c0 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 31 Oct 2022 00:20:10 +0200 Subject: [PATCH 053/292] build: harden npm-eslint-plugin-meteor.yml permissions Signed-off-by: Alex --- .github/workflows/npm-eslint-plugin-meteor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/npm-eslint-plugin-meteor.yml b/.github/workflows/npm-eslint-plugin-meteor.yml index cb283e3c54..33c0ca5921 100644 --- a/.github/workflows/npm-eslint-plugin-meteor.yml +++ b/.github/workflows/npm-eslint-plugin-meteor.yml @@ -6,6 +6,10 @@ on: pull_request: paths: - "npm-packages/eslint-plugin-meteor/**" + +permissions: + contents: read # to fetch code (actions/checkout) + jobs: test: runs-on: ubuntu-latest From 50e763fb44df5ebde9801c2ffcbc1a9d0b908117 Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Mon, 31 Oct 2022 21:27:46 -0300 Subject: [PATCH 054/292] Fix "type" is not defined issue on TinyTest. --- packages/test-in-browser/driver.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..e707f6de2c 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type !== "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); \ No newline at end of file +}); From 3c983eb0828599211ad98bd8425c583b56806218 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Wed, 2 Nov 2022 22:08:33 +0100 Subject: [PATCH 055/292] Bump to Node v14.21.0 --- meteor | 2 +- scripts/build-dev-bundle-common.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meteor b/meteor index dff5d789b0..29d45ea978 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.20.1.0 +BUNDLE_VERSION=14.21.0.0 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index d7b4cfaa10..31655db57d 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,7 +5,7 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=14.20.1 +NODE_VERSION=14.21.0 MONGO_VERSION_64BIT=5.0.5 MONGO_VERSION_32BIT=3.2.22 NPM_VERSION=6.14.17 From ac6427bd1116354f0480421d14fe91c34f81b9eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 3 Nov 2022 14:26:45 +0100 Subject: [PATCH 056/292] limited adding assets only to server --- packages/accounts-base/package.js | 2 +- packages/browser-policy-common/package.js | 2 +- packages/check/package.js | 2 +- packages/ddp-rate-limiter/package.js | 2 +- packages/ddp/package.js | 2 +- packages/ejson/package.js | 2 +- packages/email/package.js | 2 +- packages/hot-module-replacement/package.js | 2 +- packages/meteor/package.js | 2 +- packages/modern-browsers/package.js | 2 +- packages/mongo/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-dict/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/server-render/package.js | 2 +- packages/service-configuration/package.js | 2 +- packages/session/package.js | 2 +- packages/underscore/package.js | 2 +- packages/webapp/package.js | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index ed41554770..a411dcddbb 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -49,7 +49,7 @@ Package.onUse(api => { api.mainModule('server_main.js', 'server'); api.mainModule('client_main.js', 'client'); - api.addAssets('accounts-base.d.ts', ['client', 'server']); + api.addAssets('accounts-base.d.ts', 'server'); }); Package.onTest(api => { diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 9f53f0a238..34748b2c22 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -7,5 +7,5 @@ Package.onUse(function (api) { api.use('webapp', 'server'); api.addFiles('browser-policy-common.js', 'server'); api.export('BrowserPolicy', 'server'); - api.addAssets('browser-policy-common.d.ts', ['client', 'server']); + api.addAssets('browser-policy-common.d.ts', 'server'); }); diff --git a/packages/check/package.js b/packages/check/package.js index fa6b3a5ecd..084004fee8 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -7,7 +7,7 @@ Package.onUse(api => { api.use('ecmascript'); api.use('ejson'); - api.addAssets('check.d.ts', ['client', 'server']); + api.addAssets('check.d.ts', 'server'); api.mainModule('match.js'); diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index 3144f3d5ec..a692fb365a 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -14,7 +14,7 @@ Package.describe({ Package.onUse(function(api) { api.use('rate-limit', 'server'); api.use('ecmascript'); - api.addAssets('ddp-rate-limiter.d.ts', ['client', 'server']); + api.addAssets('ddp-rate-limiter.d.ts', 'server'); api.export('DDPRateLimiter', 'server'); api.mainModule('ddp-rate-limiter.js', 'server'); }); diff --git a/packages/ddp/package.js b/packages/ddp/package.js index 108285a4d0..630a456199 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -7,7 +7,7 @@ Package.onUse(function (api) { api.use(['ddp-client'], ['client', 'server']); api.use(['ddp-server'], 'server'); - api.addAssets('ddp.d.ts', ['client', 'server']); + api.addAssets('ddp.d.ts', 'server'); api.export('DDP'); api.export('DDPServer', 'server'); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 7ed5099790..654f16c568 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -5,7 +5,7 @@ Package.describe({ Package.onUse(function onUse(api) { api.use(['ecmascript', 'base64']); - api.addAssets('ejson.d.ts', ['client', 'server']); + api.addAssets('ejson.d.ts', 'server'); api.mainModule('ejson.js'); api.export('EJSON'); }); diff --git a/packages/email/package.js b/packages/email/package.js index b3f6de4894..606513eba7 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -10,7 +10,7 @@ Npm.depends({ Package.onUse(function(api) { api.use(['ecmascript', 'logging', 'callback-hook'], 'server'); - api.addAssets('email.d.ts', ['client', 'server']); + api.addAssets('email.d.ts', 'server'); api.mainModule('email.js', 'server'); api.export(['Email', 'EmailInternals'], 'server'); api.export('EmailTest', 'server', { testOnly: true }); diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index b3986feebc..9b0c1e3cef 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -11,7 +11,7 @@ Package.onUse(function(api) { api.use('meteor'); api.use('hot-code-push', { unordered: true }); - api.addAssets('hot-module-replacement.d.ts', ['client', 'server']); + api.addAssets('hot-module-replacement.d.ts', 'server'); // Provides polyfills needed by Meteor.absoluteUrl in legacy browsers api.use('ecmascript-runtime-client', { weak: true }); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 86093b59b8..992662e5df 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -55,7 +55,7 @@ Package.onUse(function (api) { // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); - api.addAssets('meteor.d.ts', ['client', 'server']); + api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index a18712b61e..01cd4c954d 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -10,7 +10,7 @@ Package.describe({ Package.onUse(function(api) { api.use('modules'); api.mainModule('modern.js', 'server'); - api.addAssets('modern.d.ts', ['client', 'server']); + api.addAssets('modern.d.ts', 'server'); }); Package.onTest(function(api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 39dd505837..00ccf9c7c0 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -82,7 +82,7 @@ Package.onUse(function (api) { api.addFiles('remote_collection_driver.js', 'server'); api.addFiles('collection.js', ['client', 'server']); api.addFiles('connection_options.js', 'server'); - api.addAssets('mongo.d.ts', ['client', 'server']); + api.addAssets('mongo.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/random/package.js b/packages/random/package.js index 1f6dcb9231..3bafb5afde 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -8,7 +8,7 @@ Package.onUse(function (api) { api.export('Random'); api.mainModule('main_client.js', 'client'); api.mainModule('main_server.js', 'server'); - api.addAssets('random.d.ts', ['client', 'server']); + api.addAssets('random.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index 62a7ad8788..b5ed045e41 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -9,7 +9,7 @@ Package.onUse(function (api) { api.use(['mongo', 'reload'], { weak: true }); api.mainModule('migration.js'); api.export('ReactiveDict'); - api.addAssets('reactive-dict.d.ts', ['client', 'server']); + api.addAssets('reactive-dict.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index e452ffe216..00b13b2cc2 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -9,5 +9,5 @@ Package.onUse(function (api) { api.use('tracker'); api.addFiles('reactive-var.js'); - api.addAssets('reactive-var.d.ts', ['client', 'server']); + api.addAssets('reactive-var.d.ts', 'server'); }); diff --git a/packages/server-render/package.js b/packages/server-render/package.js index 7b3dab2aaa..95e9f2bfcc 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -17,7 +17,7 @@ Package.onUse(function(api) { api.use("webapp"); api.mainModule("client.js", "client", { lazy: true }); api.mainModule("server.js", "server"); - api.addAssets('server-render.d.ts', ['client', 'server']); + api.addAssets('server-render.d.ts', 'server'); }); Package.onTest(function(api) { diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index b411945e8d..10f65825bf 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -10,5 +10,5 @@ Package.onUse(function(api) { api.export('ServiceConfiguration'); api.addFiles('service_configuration_common.js', ['client', 'server']); api.addFiles('service_configuration_server.js', 'server'); - api.addAssets('service-configuration.d.ts', ['client', 'server']); + api.addAssets('service-configuration.d.ts', 'server'); }); diff --git a/packages/session/package.js b/packages/session/package.js index 0ef45d2cea..df54addcb8 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -13,7 +13,7 @@ Package.onUse(function (api) { api.export('Session', 'client'); api.mainModule('session.js', 'client'); - api.addAssets('session.d.ts', ['client', 'server']); + api.addAssets('session.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index dca1b73c77..24c18c9bf4 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -28,7 +28,7 @@ Package.onUse(function (api) { // objects, not as arrays. Search for looksLikeArray. api.addFiles(['pre.js', 'underscore.js', 'post.js']); - api.addAssets('underscore.d.ts', ['client', 'server']); + api.addAssets('underscore.d.ts', 'server'); }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 5420188efc..d2dd15a551 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -57,7 +57,7 @@ Package.onUse(function(api) { api.export('WebApp', 'client'); api.mainModule('webapp_cordova.js', 'web.cordova'); - api.addAssets('webapp.d.ts', ['client', 'server']); + api.addAssets('webapp.d.ts', 'server'); }); Package.onTest(function(api) { From 2df74cec40d11b2d81ddd34e4d2a5eb57163824a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 12:52:44 -0300 Subject: [PATCH 057/292] added docs --- packages/modules/module-system.png | Bin 0 -> 95033 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/modules/module-system.png diff --git a/packages/modules/module-system.png b/packages/modules/module-system.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b82ac455cf3032baf2ab3fb964e8190ac1dfd4 GIT binary patch literal 95033 zcmZ^K1zc3Yx;WAzhzdwAD3a3MAtl`@DJ9a~AR-~%A~~CMfN> zIe8Rypa)e|49R_tM>+}$viDzC5Gl#0uwj=N6Jo12;J+Yb<1@yhNcT%oNb5$dy>Y8+ zf!ru*g5Tb4sL8M4ym+nlPbreS*acupRZtf`WlqS@k4eTA>=`G4*X2LC&=D~s|u$Ln0=pn z(K4?M@KuNUWh?qT`7Uc{hy~rTu%wYJrm|r1I$hBWdk-6D17{^UV3R^EXYtz`e~~%+0YDdgBnxYw;l#cqP9; zJEDSHF|jFI-=Su_o~<>ySSJAF7rnfDA0X5pY9AW%i`Yp;ThQ`;AoLGse1xYf`;ZNX zq|{B`iik6u-W~s_j~4es%?G^aa&$9(9HUr4a>Ao{(fxed*x-Ig?FW+|&xM{7`^o+9?esr4j$$Mv&|&0wL8Ky2luT3lfRE8@^r2^DcM%pFZtRE6Vp}$x zC4%i&c-r^%@6F4}$Wj(_@39CHu12#Ind}K&+*9heHGY)&iNcyI``(*=?s}1Kyu=S= z8{VQ1q;V++Gft@6@s2*a4Gx}&-eOzG-Xp)SC_h#ts7;(s0;Z>kAyW3x>CzUfc&^V} z^>{uJuDGh00Nl|&o;DVw&`@?N(wI(s#~}D1|HE43q*# zYL1tMiZxz_1v@QvY?$1-ifc3OB^n|Y zReobXj3yhZ{Pn~ANR);9epZ4+xI{$PN7@06Uu(Zq{2jZw*8mJLNh1!MaVLmB4{slZ z(ty-AnAjev6CUAWa6Bv2R(!|0@=X14=I2`l<`U}ZTq=zfHBJ`cCv}e*9oF~+~MBws>8J- zAiyy|3~P1MI^H#v!cupDz+w8K=rw*rs}>biE2_hJNPO1J~#t> zrC-lMoI#b5#(`5+Ulsno^nE3qUdVVtn@jbubg4*OY1LTDqDMDGKjNEpSxU)t5nr*& ztoQtnIp_J{O6EF>3Lk}Pql2{8aNlpf8JF_(_vjt+)$@Jxp`BHooU6L4L4o8_K|QO1 zE`fCy^B02`TKh@V+9WH)m$crr!GePPTQtHnlQd(rkyIJf3H-R!fOyGa5}WvjmQz=l z+VHUku|}%;WbUnNl{JlxshfC{oTL0=R24~@eWSg46H$|gS7$)XwcifxDgRUTIMulF zOwUZ`@%Q77FDa_uRSOvM)U?!eEKDq@39|@GxQM&xv_5PVYeo5D`%3#V`)d8RJ7oGz z`+Jw3n9f(!Tl_7ZIbD)yqPU89LmoVDCqE(2PyDJq*<83IyXLo|Bbm6lHYG0{^<9fyjN@Q`2+a!+>PF zd2!=?bB4sfUbyDI{)wdclW^m7eS86;XMFmIV(MwkgA0;x56u>x+pZUPDj6e+eix;1 zslJ(MU0LC174kjUwpz2YKZ$ %K1BWRz$&-(<{;(1(cYLB7M!`ot!Sdaj?5zkl*J z)qkwtcW*lRc#=cd6a#$Rl=3u1F~v(qSch4su7n;q4$OMHV)Op3p$+P7?&gWdGY?7_ z-lolFP^*fI+OqJd4$RhTm`wdiBJ&R~^Y;1A+MAi*TVKd+5v*i=%e&P$Q-}>vbp&_m zug^VjymdTv3|Tg4V_1>ScP+d_J-m3hka$F#6W>EkCQ;*S`1_-8v5)H| zY^QE_Y%}!6Azi->6ql6gHZ<-DUV4M~9SnL6de#Mc>#CntPuAQSlUWK_92hL?Ip`Z1 z@#qw;V~M;F`B89RT)=(d()kTg$wrZ^hW(08G%NV%n)I1We4d}!dPulO@u_ko!}yoV z2{A71@ypEXh0%r6)(@@yag&r?%NonMVKcXtJE=d)X2xG-olC^fo6uJq&D3#vdy4ON zKJR4dis)jnK!5`4Mw-geU&dQ#p@(&rhb{0P&%xirWw|UOJZo=P-uJlpca=ek>aHCk z3UhBrZr&VGtvb^30^TvK@GkP%^3C}`FOLvGnpdu*Zgc>;Q)+5j5*m62o1}@Aq#iU} z4ji!^9R#ojY)kG0nO!Jss%-OcfCLk06DNYz=28uhJsvD z<|04|FUN&Y-;L{?T|FLAp3L3GFc`Y#ciGuELs;8wkK0;UD4gPI9)8d*QsVZ04GucA zI5GBbq-tyLPCwVYFh2|$zF8v;W%!zGIPsZRDzl_>F@=bSt zQLH*AtRh@2S$f%vxgDR?%jn+lQbaFXKDzH<>8ObsTYL5XqkFi0!%|rKjI}YMb<9|R zn4mYY$T*RKfYzw+3oe;dl_$*ZVfo_aQ(c6P2_ z@7%nVN-Qm=6TNek0#zuQqPSwv>D~yJna~Txp}#HpGy-lGBQef+S-fjDk%L69P=ji z{GGSAyEqSzpPwJMp8&U;rvne4n3xz3FFy}IKNqG2msfzRx3xc)s~6Khk^C1P1v@Vr zPe*reM>ki-zj&?Ry7_oZJ%9eUqyPT>bDVbmj{nn>tJlA#g_$7F-x?l1ZeE`M#*G1$ z{97un?dWgkY@*=kf*}v44{2due#w8d|NmP5lwt@iO(eH;oaQ3lIeGXt&3gvY$zWL zMbY5BWW0=}piq$0b}UJsK&kVGK?-_&u8xjYSJx#Wt36lgVgly15gp8Ixpz3^a2*zG374X@@V7o6k-2N=_+iH_ zaPkv%HXCxJigsPC3lH$LuYg(3C4D%H&21DcL}5Xhrb9ne9@U6R+~+uBM<#TBxS z+qw0pJwpH55(1G}yqT6>yR)dP9_jR0fFZ=u%Ogwc2STVspW|xirNr9tUFgVrI@BbI z_>O2!)6ml}9Y3V`GLL!UFIdy{PA+tW2aYasNF@8Idqja2z3Q@`3GO6Vp0^cny&L`| zIVt3#8PRU>`z@tY@X5FSV;$=TXuMaULsF;f)V18m@^ybnq4V=Np3u{{HXien9?M%y z$8Nv*!z^rg_@@oIAmgzNI=?eRfYp$AO&2*U^q zub<-*Li9PxpQWRHF|%j*bIY!io#((8}~)7N&w1HLXiv$P?u1 z@%JKF#H2=GNPz#Y*kSunv}KnK;3EF=H1yOLq6KRcEv@57UKJftQI-H9ka8pV^vBX! zeaoKXTxwm8BVv1ZawA=*3+D_6q*=hE+K>3bS!iWE8JSLzG{KAfZAY2S7T3x^Dj@W*Ozzkhu%Ct zKsgpNT=dYd*B>8xMQlEIXr}ck3JJMBMTg<9zNw@3DY&h{{~mfZXM+e!s56f~Xb7Ar zLPylndYeh2CJ_<~peG&| zv__!dxr1f&@@X54+FRqM{TLA%%qzl+S$R-ygkM72P7CU`Y*^~BeQCe{D^0=jNY}d4 zUFXOMs%P#-S<1l_19#eEUVxh6bu~ZobGuor*ln((NAwKOPpW~uTa%_ImiSi%@}SUz zE^drJlR0u}Gb6QtlH%w=n4oG8D2;B6B}fnb&GaIihVQQ)oFuzNpq4b3VE3TVAbix- z%B2tDsvbQ!NfM|jwRXG~Iud1W2}#LuC=BuSx*oT*Ajdghl7`+{z$(!g(uExRxkwqJ zNjv>$M)n0A@;sEh5Y?9E-nrmf>1FigRiMTdS`_MiOnuQcJTJX|X8|EaTGq`EBf>AL zUA|*T}9L(0a#F zL!g$FMOYj9>PB;cx5V%!S`s2~lotrEoLFAFY~68?x%v4q-22U9M+2%06|&gze!hEv zqIRS4Nz|&un2>l%)ra|;+vDMNX?!ctIf7>Q;OeXl;V>0~c;aY1x@4d00xxd3gZf8H z1!*fB1|hd=3Xa#-0nUC95~LJc?Ga)S!}8joyfb5o&qrdA1HW%yf$JTY4RY%TDAZ=% z)gP^mU(kn$;Hx#v+S*-$B5u}>jU{?7uP;4()J*SxygWU+@@%|v(3XsovMgk>V6a;v zS#?+l>VzUB)_U4*mZflQKvT!2P@g22a^flBK0fsAN>8~3^!QKv$op#Z1`5hL50+srMs-`SE0?u|)OC|`9AEkz9;baj?)9i+xazd_0LQhe-LJG>@mDr) zn>!zzF`pH$abnS^K4>@q@B4Okt}jEhlaSPXombxw>v6yIe>P`;TPCgbkt4tKJCc2R zNgt?5@f_)R#CuIth(_ht@uOC}Ao*DaS97fbf4AiF;{>k>(Ez%uFDkXP>67nQ#Lj;R zj5D82WxhPTfnRx?nZWk_TtGIP0B=YU3|8u}*feUYgoR`01GId%zJ9mX+Zq%+cN}#+Uc z>JokFcXhprnuAd-cp;2YtI|eE^XN$*NLv_f(#no-o8#q@6VG%eFQk2t%H#HQM5H|5 z*R%;DeKY5@V>c;B`a9~f;qvMdfmQw6MX@O4u;}kT^mM}SE0w<{FO~FQIl5^3z|Wo^E5y;6pB9lLk(slA+|%@ z7NHMsI-zr32!B-1B6<~R219^CEuB}6s*5enCR>vH!rCD7$1}^qM{|F=t}xoF7a26= z6Oot{gl?`o$SNq41ky8v;zPR=JFQn7nqf{Od`Bp?4p(-FMdEJjdExQ1N7#Q;z2W^i zkJq3JKM2?EvE#6miW$OGJP0va%L(rY1x4q3p;QYPF2CvQ!i{5fsx6jL>ywb?Ngvq$ zUBQCDK4>`hkPBO~`lb?6jgiR9`v;*6h%S0)#W8Ra>R`}Q;8H@fm0yk7Uzcd#6@>ql z@r@tK0^J6y9f?96`%Uus;y)B)&2t~Hf+faN%X$HW7McpSdp|uQ4F6y09xhVj!<-sM zd_uRv2tUaZs=xXWy<#0rztFwS<(A{O94wL*P=3brpN)@KR)&Q7b;Y%({^1@Yc&l;t z%w#Icf3f`k$=Md$$E{pA0uQ4Y#)3)z_c;DFtZWkOd9U)^FPK*TN8XRO{r&?c4DKKJ z_X;FdDU8nJC05g#Qht{{|G&of9Fo65^nZ0Gh0P@8_d;yE(Y|gYwd8+M=3lQ=%U%Rk zoDkK>`~MlsPbS{X-O1m~672t1Hya%S3)NGwmNf8_e=LoEE|7n_H>rFGFQ?t<;i?Ye z2g&~*cAkBN?5bD!L3UGLdm2fG1F$bO_CF7J?+KNYiQ(1P+lT*oz>kbW{z2nZJPZjR zoJss&loKY5N3?$99RHFqpvv(dP0v?F8byIe@he{CA$q;h|B31UWR-=)U-M};#Acz} z&cu8i;`~CY^8Z_i|C)@|+*sqcxrqNfHDe&I@UnB0{Ww>fbLXVkxuoC1yS3Ec|3~91 zTsUTi@x$%2%&F@(kN>P)^+M^qr{pHCKxkA$Ekuzvw{MKKaHSiKI(Cyj&w)5QKN>?d zK6x$m#<2UdrN>L++}CS|u#Cff$#&`($9}_8d|ux>I;}Q9dEDem%MK z(()So{c0y_i0sd7;oV$bz)nsaN7IlDg2#`$wKvZb%sxRN^QV7jlqu;}&Gz~!HV$EF z0SQ*qJ<@~1Nl{q*4r$n*LHr*fjgo4(PhV!GMw>iOZvMNK`jF42R@F@=H#?d_!G4>0 zw@4_+)dG!#ia>(a&c9fq;6`MtZho#;=*u=x{$8(Hww0kMlI`P_18MCF7L2s!`xZE7e!z=y?pn~)b5;4`N)LA(BESU2pc z&8T_D+}*ay2%VSuc`2(@rP%NK!8=d)c(+Oi8(CAEtl)z;>m2;MmS}`!E(2;$*@+XO za#V`z{BSIWKhCK0Vn4BNPeB?%4R>@-4{$8 zgy0*dgfjsb)5;=R0bo7V)qs69OVdzD;8Kgrxb*tX+LdPB+FX+f&+6Si?SiFS%eYt}11>1hLJ=EQr`9}Uj z7kOebpJX3-_`b}BYma$w>*l>j?pDXk{LsL7kC?HJPmib+WkdF(3=k{RIke58S6%C? z7m2<&Pbii;hVbbZyVg-hJJ*n~(DSB3lyk%MH*g3p;y!EMRQ9tob8UBG8nf9Oip{rV zsw(z##m(yAH{w+H{`xsQm!~%C(SxL+ClNa&ZvOJ;eqmRB6Kg@o=J?gK!fTarkkHGf z+^e4B5SwxrW^UV0z`d$*QvW`jFVT`)&n7Zzy~{HEFS;EzT(rpOS4;CB0w-1HvjRRB z%#g+&qHiH+a``bz(4Qgpq0a8$C8MN09 zORhstx3DQPeyDnFdGZDuHmMqTc>8BW#?|69)<}>ia5_%-aCP8tiT_!|Zc-+f4ByXM!Eew1-riqZaq{m0WvT16 zo_KR`WSGov6Mf7jAZc8`qu&7d7m(9a#PQLiUTtO-s1WlYkiFt5_bArBYo1a*>PI(L2> z_WiMPI#Tpunxh5qkil=oW8zsfU8Ccfb>%6B3mMyoZecfX=UA^0;j_ZOd4xzi!cK9i z+%+n?f7|gmUG)E5IO7VFAxBvn#z-3 z&h{%KKlYx!Q8%RU=E!wv{n<$6$D3@VDtT`N=U3ewye`%=iJ&f{rfsb=ICG#Vs7^9J z=%{1JE0!-(dw0In731@?xo~^sjC;G8T&{yh;;FayYyEnhye6D5(SSm+y?f;H5!DkS z>%p7Ix5>2{b@Or}IVGWsHsCd7I4%rmvo(j&SF?XDDRwY356(D|;Xt*EwuzW#ZIz7B zT%cJP1RfT_*4P#0T5gbZbpu*Epf+(~DDmrt(N9Pnc_eM_*QX9!poZH(sKd9opz8^@ zH8YIVKQDk`(kG$J4>f^KwO}*Rev2`PQ`fWj|IwjOa!%}UX zg`sWLce&B-Qv-y{Enr;f4YH3wddlqXEX(b3(I#pBRod<();+{*IV}tAwBNDCfExug zJ|SE(GA}F9j+LW{RGt_HX%9E}8OmshnP{BEaTe%yoB!q@K{MT&9t)@c?&eq~?N#TF zp0uDDP7}l3Npxgfb8d~DKQHibCG(A|iJQqBx|2NaQO9>?ZoZUa1w~JWh^b~NKQ;#Y zvVi>x27Cdnpru)w{5b@MlW$Kk*Q$q_#F6og&JfS-9#L2v8Cxz(i!Z`N~ z2qpyAL1jR^X(ayc0sO+CE^xl2owuUKa3eD@>0uEzf+WiO+!;g*dY>KFJ$YF0oqKATskl`aRWj;!((PkjP)HYb2q#WEpO>yhwwOZ4s!EcdTEV9L=vz&?wSR}j#LW7Ph4zi zg~0V5utXx}FH{iV(*5?pbU~9?O}`gp!#!@sfmwmBPkO%F3MZ{P;&u*dN*wC{In(Zi z(I1Oyb8B*}m#6eP4mZ&38$r5nOA>FYdL11z#a%yUrA!k&^qEE&R(x+4m`JtE^+?fM zor1PEJ)y6jT#Y#4CR;aallWJ!agQ9umsIr152{JoAwt*bed;>*IONd6@ufq<=?A1}NOMDZGhl5bT4*?JLQ1KD_$b-(P zp*HfXFc+%;0E8e4cbKBkwZMIN^z@QZ{wHiN6w(4Elylq(@7H#4IHmz;OL}*!yf!0u zSH-fsGi>WL;KQ~!Fokj;;ylXe&C2t-pR6I^6m?aO1pBF!dFAseYOo6A3J=2)^U#3( zWLn^(N&&c;jLn9wu_kb}<-E$Jl3+$vI>)hev_db@$*G&r_orRf^Oti;v@09X^!S5WV%Zfz z%Lqx@xiOVx>#lf8J&6BdO7+r!sGI6sB9#i;_)-G(Yt%E~ekn@mTAAC)4HD*y!S4?cIYzbs1Ca@LIm%BX{O7GlAs&dYu7Mtz z+-qT?w2yocq}!$e{NnMmexzw?v$o3<5K+*)Ie!{=dBQ`Yw2NQhw`QmqIvQq5_oK@c z*g}TfwTD?KHJ`Jctnw8dVpf3-_6$c9Wf6M8+Wj684Z{to_%p`K@0R{hxC)fUEv{sg zRpaPkVH$9p=F`?b#09U^Kx=$Vs?KUgaCuy%4dp%uoGQNAY_Q>13xdP%mZAgOjjxYR zXWuD%>+?rmf%u`jR5IC&uIE<3wxBYAT@K?=MQYRN})%1FkD<9{9)=LSj@34BSF} zg7bL4)zR$UnF%c8Hs{u^+V|qw;LX;-=I;rlK6=7>NiKw4&CSHfra$V-nCJgzF)Zq_ z;x;s=!K{&u*2;-koM!l5VaVmr@_?xbfIhhzq zlV>oUVa{LKS-V?OD`j zOIx_4!PCjlmM7+bj$J;^4vRa&4?UMl)og0%vW}Ug0KCgZYvNhz*pUDbyIwk%1t+-g z>ri?N4O>#YmBD^0fL{NN@xzyeBhr@*HZIuT;@u4xc+03{cEup`SGVSmJqO7ucY!)h>;r=>?ApiyGPj9n@bw*(Dh4u zDd3X{ETQ8((}mu>?_Q*n-HwbVZi~}*#b@>vgJwu2JaD8pCJ3y0QB*X+`>k?h(>Lkt zYdf6ky%d!};ZWT}-kALt)Qi4{T+!9w8u7j$S>;;dlb+?(BVnFnpOa_-8=z-@o4KW= z!;{Qfw`l9b#M8v$g*z47hTwrZUIsX)ZvGJ$R)w`(29{q`#$DfsIx4B^-P5h%w?Kk?WAPISF?fD^(d6rb_Vv3(le|J7_l7XA~U^0b+bBvezngBQzwTZG<}Svn9H=@LS*j8%jQ(`s;!B_F4VKG*0Qr z@Q8g9q6<9ZsekCV(w#f1$Gy~f-0hQLWd5-&3^GpB*|20XXRI?bb#3XHzC9jZ8Dt;3WWLk{LV%@br8OMU^Krr z^a6$K!NeCsnH^ylzl2CpcWPJd$j6s|mCr|?Lng%fB}tBwgtar{gW&Xi9Vy_izpgd^ z_3(xs;;pAc>Y00CYh7ZM){#+kvx<`8VE|oEY}+IGx=u&;JB*ul^?)TNBiu7=OwB@f zi~aaVs2t7c2M}A{+(-%Hrbe}W{$=nV!`{;szkq(UhA%S&!yKp zU?LTYgw>1bsumP9PBL}m8QFGMkvzfH`*Z<|kLGZB@!Uq}{Wu*1=Bq6X#NUvNd-P?)lW* z!%8UG&lu4!x2k&y&Y6yvsHfH&NIR>rVc|RufCOcBBQ^PKIR}$Jd{ccb(IbunCVUEy zOVp8?t^8F*T<`GdMRM7?*s$!i%wADMYPAvyaYCYqeiAb4TsSm-11xo~14;DXwPTiGL$F zY5*z&YWr=Io62FC+yJN9rQFMJuIzq}2lxn`9-9w9PVHcpN&=vNGv)-%DyqhUchdkb z=7(-33hsTi77EG&7E~(Ra{YXfk8KZ+4_7r<$Qbur5IBn>7Ml9zqc5dLFe=w*oe8I= zE;mmGZGoE)ezF0O?@%O$w$*_d@v}ayq*Uev4!`1|<2y1>5%PhuwdMc(}L6B|^o9ZI)7Q zlZ8Y#BO^cibK=?+qmol*Z1d!`<`SC;4l{Jj))lnM^=1we;rrm>CtK_tMWlI`{+`)% z+9RWEO6)$FlIgC2S<;_+S04_md~7HW%}D%aK|{-bd#*`FD%O??%kZT+57{P6zA|5) zuoTS9P*bjKr^$?Zx8X=8WpO|KC5}mcb+~Yu95ZxL&^ER>O0C1Dd5V{W$a{mM1@;kK z+YkRuxD^_%>v7UgkhS}027eH4;{|#(J@*gqL4(kMEg61+8}@r{2naEhSv~Ht)}A+CbvPp0z7w>9drfh4I zrUb@Q3xVV1aP2a5E9ChF%3Rs5OdHrqyRq2z(%(l>)((+dUsJHkzdkg+ugM@M%^peq z^7;TD2M_K@p3Q^D4vxK9lS#Dp+ zuw8_Ijo`G4YjEGau5_XC53Yo*zZ zTr@h;RESH!buOcPvbww5b(T{pOM6e9_^nd|``m@AToGg&sF`OW@#^t9wxl~?O_a!q znR>RbRNB|Sfn_`Gvb9vTc%yU*AHz4PzMkpMmXm=>Yfj~LL8}Lg};O09|S%#;4*eMfPgsju^>&(|`{m_=Mt_+V%*&iF}lLG938T z=#L%9Ydx-Rw4fDrcu>l{*$cm|=OKiaI0bTuwAv!nUQ=_mT&E_;!7phaB)N;I3k&(h zA;ZEx`V>cZWpv!*yjDHExN{4z)|fpjK%AKo{%2nrh>gF+N-u|Y<&OY-J@zw`>U)(3 zRtVAOLF8T#qP~U;@wocP%1EhltIUc9ZdEi(@MsXLcPDOV?FvdG$z1Xi-!jM^s)_9d z?TdL^hGdG%m5Vh%2~^UWlV+ny)o4SkF@j-*j)jugwXE(kg&6QJ!O-_*J86xZ!&Gpt0+hQ!6^>ii;py#(!T z^;e?t%PyMA{4O(bku@51TU>5vZh$;t#z7`1&e0-yI+P$gh}WdX)Zf3LKNvB^`OZx0h}znVS%q7A+`^#+^kI;1^sy+ zGX1PFNNDf3kLYGa1hqOILXiksCBB{xkHA)qpC&0*}H}-(2C-kS4yEdv+o)0%+ z#%EaN!OzN&_i0O?!z1qWL28Mr(Pw3D@o9c`&w22{7qU29r&W4jRR$(B47c$kK-uu6 za^6sxhS3^QF7IO7zI6hw)+SyCVvK`(qCK`!gA;+uiK<~jfmKfUNJ!v9Q!JmhrE_0Z zLbU{o&mMLyRC-T%tJKC@;xI9>FS~+)rkoU7zEZXLG2HGs zJmlj#-<8qIzu{NKM4KVD%GxRh;H!C_h7inIFvIMw^{v#qbe#y|^IK~eu6TIo*Mgj8 z#+LyzDH1cqBz#{|`Qj5VXgv~Xn{z?~KVLEysMwwsInX#Imv1#D3BsdG^QTjKH4M`Z zy%i8mnnxsQ$FTSjGa#t%bq+7C0P$P!J6L6pTs=1^Z7R=!oKT_ULL^ zX`9(yw7U)5YB)2$+^H<*>@GNPyy?#lH%q0olgnbMOONb+qgcW@YB%ibthArLnXeE= zC1ml~asW)GZPaN!lpukx*8Q4LW@6vSbb+ z>)}-s0=fDHS>rF%EWZr`!#{p!EFCylq}E`2gxfNib|M^8M953L*FFRbOi;05)yGYc zV`3sFq#p?(6iukbf7SBP{-7Zg?GuwOOOmoF$M-Cqs>fR!w`y0-f&S#=MXEG}xtZ{I ziCTNlJuPg%IDKD%%9qf_f)V`T7p__XF}W|!JJ7__O*z@K>|X<;ygJk`39zG6i;2IB zsa#*!Y-EeF7vl=`J8OU7i3028{Gpo{*w|o1iF*wYGx!Y0(+;J+vZ!-VAZI9x-kg;E z3e;Y}?LPk)xGM%W>fwtivf^{jj&xUNt(oK{_6Jy30bUCDwBys$-huJ;d=zPXR+g}a zWIN)?sCF)o1MUZ8PL{XgKqw@Y9aK{cChg_eCgTO*DdJl>_yj<>fKArfoUpfNw$(6d zp(xVb=xY7}K8Z`jM+jDh4Z>OAda2d{D$bs7z@8E65&xFmHNciwkDxU2xdnkg*ipMH zjg*-9LyJ$q%p_X?xz&|wG_rb@yzSC@zd*P`I*kvX%E!Gj#EEGMm=sRHlpJjQHoE2< zJf=)l4tVF5HdpiHG+74x<%ztjXJnS)p;1?xbH7`JapOH!;*tBa-yGnAm*CM4N~=QJ zGojSW=^dBF2|C|1n+hDy;kBI!pFN+BG6iHtnN&M0m3SJ;L^>{DEQn_LLlp+#YW7Jz z>z7`+pj|F)0`%syHyQawtEqbM66tkWC8~MLmszGPOR=4YCO$iz3j7;M!k_2a#287C zB!`L?{&8?t;)m2EoD9Acs?-b7iuz@9O zMH2FbB!YRXGBmRIoi@r=^jV?OzBsC2RqAW+zKBNRR9EnbJgCvhjXhpE>-L4T98%W*J&BLd1`8;I((9owGje2_i7pHrC9FM4E`~F7uw^R@Pws@=C z4u*QzdL%Thhh1ldcE(;*TM{F@&C=f5(ojS8fKoQFppf3)xt@Wy!#1`JjRv*w8sD0U z8FWZ9ePhax^aXBt@giTA9`83Uc^-+HY%XB!)s4qvHa*~I$1)JZtlWsCo`lX7hrnTU zbPDo^#IzVm&&s1(*UOcPfM8QRf!|Z zbkXNj;NvHKK2{S0-=+gvC&#hWfU{$ISo&}CA26>Jt;93-SBJwH-^-^P(l}i z$?4AhDAJJ?e2Q%d!*>ee<6$>#VJ{&p@jlJ*dNbpZb*7rt zS;M8bgn7U~a3MZR*rzPnd$moTp-q3(1o~C99lLQkhh{mk6k}wC7Qb52GUgaq<+&$m zLa!RJ1QQ$}PU9hFk7U-!=OK&V;$TQyU4 zpM^%r22d0t8DFP0W-2it@}O~@m1Kgl$!$7_oB^AY(xxq`XwtIR&pGOnc$iOWr;8Q4JeZKI%4a`r3_V{q2)&0J9ek?kk{=IzkKM6;>HW*yar zNlifdOS>u>{IaC!XdU%8_7};92vwv{g}6qzx(>tqy?mCTSIaX;%?5~BuQH81q4+8S z@M{TxLEHOa;GJ4D@>wBVJW`$h?9HmppA1qWR(U@mi-cI{wc~t~xHd~tRk*s8t_)S} zJlCP#HCr?$YWat4&{vz(zM-IUWJ&6$&56aJ;K5Huz*3&?H|~Al7^9ut2RS8b&J-aQ z{5c0tLs}m*OZD37T#NxH-xpvU#>Hhz*zx_5EXJL|j|C32d&<7a)C>W3DqTY<1ul7G zQ^PM3JeDivVp?~uk@}vLtfz5t1RVLwVS=2aA{Mqqt=fo3_?Yb{8Z{<|u%R<|Fs6Zv zc{movTOxHs>Mz)XPz*WG<8%EwNtjFz4-nDdC4ns?%gV$AGOFmI^7Te%c{*^i8S6L# zH1m2Vch z$g>vt?OV?2A-{~#ZdXa2KlDLig31zXUE8A6Y7he@upCHn-QeMcRcBdmXu8EvbtHh@ z99|K~s@XW>CXR~&FXHd24Dj}RDzI7Mt>pwD%sf{J$iB^+q)pviu`o!f1~)I zaHqbWZ-{gfAHKFcXz~=W7Y-G;=II%p$gWhIQIDz`>9r~4PGuMlKeF6E1&dyf3(Ye1 z)yuQ~j>4SSQz0Q+B~(VSXdB25q->V{n$s@SFmX?aD&wam)TJX{p?-$>oX|yMt7#`f z$UF74E!I_gyu#*0!GCXsJp<#kTa^iE@64Dw_T;GFQ zmS%&C`L)0=ZY^;y&~mY7iV}1*DQev7Re3Sa?%}IF)h^BTAD@)!1cd9E>#00WgbA&3 zzB=n-5o7supE=b>%gATT72S&M(7BNj5j!Ii*^9s!qb&rVvRTsLZQ{(cA7{s#Hf zF4rs>@KsY)S)=&b7Q6L|z_te9zN4Kwd)+YJH%_~maQM5qmv+@&GpBmL=jeR~q^O!! zf@;1_W`&QOf3E~Q>LhnUq&7}Hgfm1cN)zhiGy5n6#Kf_tcFOmcQdK}<_;w}T^9Ji3 zFg@M$V$FH=C=uQY%1>R0?WLqvx#AM{8>uR3y<~O(Tml%=`iXrg;#D0dubyza*oeCW zu8r+?KeUCi8|YtHoB=JX3J zY^Zqw0yTP|gGUf$UEhb%z5YKYHJju(+hD@}m$A=bbYeec`>*HxvRlqxb?~L+F%9z#WRKRCe1Ui#$rr+XT~f2BcMBljdji`N-^!MDH=gpNmYk+&Hn$)K zx8QFp^je9zu94{DijxDQr1K~H_pGq%q(rMB`&SI4;z?)xVv4LqgUONYzqHo&llE~l zHDEh|XVZP!GCWd~2~1h(+k%T6miUTxKY*qTns@tyEzb@W7@Tz#3%?aqiNK#L!83~L zQb>{aO==1f;Dasm9zA|h`^rcj7mUrI%`?}uq+F#{AmeJjZ*+vn4va|&eG`zD;!VD$ zMO?Mi*vKE%7uip~t20c0n(AgtE8qGDZ(E*VyFq<8ex`cQiiK-mc}Dh*@5A|bmY3;G zm!D2ct+Op&6*8xdWDEfdG&Em2pJ%-7^go-<+S1ULNw^y#M8Hx=DH5iMSeKYzc z%(cKjB|@d0F7)WRH4^H|@@`rm06IGu1Lh-(j%y;2=4Y2S+xdhsgl1EmNK zuJyBo%`bwFUKcnqs$U<{_`MIt9}<6Q#wPO(VxaR~PSW1m`|S*CK2gCF6>E=#hf_rv z+G&V<#}6Bm;lp2QqSK1wH2NZr5U!{b_^nrH>p4Nw@zvB@5)JOxGK)r^=#obDy~{ z!1im1_nB+cyHA{U>N(YvaK^GMe)!MC>Lhp!zwT}o)-aun-K?;#ugS%YhGPmVKHIjf zJF}Mb5*eWO)J%!x`kRkhd0crgaW!P=p@{vJb!~SGJCS#dR&9S@!1kw_RxWxtfO$wD zz08}PQkCw~U-x3zTIHHQcb)|7tKW6b2^le^@$rUNi`S^1=w+poX!b&j)VEdWTH?Q# z%{Ko?X!sQVQC$Z;^jSh|OI)?}G72Gz_)yY74iH+sGg`2v%X#ifl-~cr`@IA?BfipE zQ8jK0tZIGRs3+G@Dh=Ompx)U~b!xb|LwwIj+LlsLr=zR@Whte16)=+1@c;Na3#cle zwe2e+g3^t&ln6)(NGnJ;(%l^b(xHSP-J9<2?o_&!?(Sw&(%)?V=bZ2T-lN}IEZ5e( zdEC!4Gxywc-E;j$fn#heI^THOdn3X=%F?zN;pU5H)>$@xk)>!|oeVK$Oq8Kw>rPYK zrFnVEeOYbkxUsGX-i#m&wtbt`dvQXy<_iez2$s_*1o@hg?$n&fQO|EPF7F{|mxrUK z%Y-AiKfj>Ux~XZ-87RrFxk*XuA)&u~{y=n1a&TMXkfx%t@9m}EMsUW?=GC4no5hDb zqG-=7!&PD8)Lz2695hOrc0(3}*~SsxQCfF6P7Qlh?-MaE2i+gVs4TNT%-ujClf@uq zP2%V^2_*}YHlrx$(}1ksElnJOG? zd4o+GD^+ZWYzDL!~Ei% zO1{I-tUFyU`O5vfNZccj5_VbE<#KL{Sw162@!#O7T9xa8v7ZRWe#*5rADqG0GH-S( z4HZG{71X6JdwVu-Ft)$f7e|i7F_Xy_hHTd@KVhnmuwe$Ug^DK4;Lki5V`hv_)T~05=(cw z#+YYZB`2fh@FXhyL(i|#jf+YLc1c%m`JYV|xHq|*Yh9Ch`tB&#Sf9^#kmQh+Zexwo zA1LaEOT(#m8FjwP`7D#P$8>1rDA}9hmFgjzI+nnN{!@(Q`G+KS#Ma1rr^rbphRGYz zQjB90>?m^E`B^rZp214#r{w(3}PKyJb+I8}+>f?w^{nuNK%w7Jr7|?U)@#R-u&ciu|}YA$i=Zuamx| zsrtronk?725YqHIM_swn7Ho!cVY)q`TgY+JSC+VYBdpXX|7$m;B1U~qdO^Jfl& zt4Pl`G5aKstq=Wnr)iC^oR2Q8bm%sfvwBkF=GzaOVjJmp-r8sKm;~`VZ4zeXd5j9x z-}jCsW9%KTxE#v@1LqeFSZq^i$7dF4tJ_G|e;`q^e$i%nzBCMWl0r31NvZJKSJW=h zH$wvR=+@T9No_6>d)04IoTPUN2Cg|uC(z8=AWFw|N{a!gLqf}#yF&ynzhE;f3r`vYStyg1_sS-q> zhA6XXT*9|@jHCp)TMJdj|DJcbC382YmL*$%p^XTfqSklW2dqqTx~e{^uTWaq^t_#- zlT*iSSa(MeR9QJU`E`drx3dggX33#n7uGEwr%4XVlf`}@YwX;LRbts2d6{A}QcQAa zQXXEiW>k2!7b3)?n9BO&wFu|aY%&y=YA(GnUEJU=iMBabPge^*Z6kaC&|4-s=|6Sh zq2GwHaO&S+F4A7&N-+ShejX@~@tzP?mE^kjW?r9+T@pX=c{)+c6(9zm%nd;~e6DE` z3n`{xM9@RlXp}tpQX6ZK%Y}cF$2+NMF^`up;c-serRH%n$hbCHIr)+bWoKzVt1?pe zLiudE(8YwzLOz3=jKty7U=gxsMkv-_b7+7_(^nCVzaMt3k6UW6pTv+yrifKINy3 zc|drF2Xf&oee77YZK5llYjAzeU@rG|09W^Li^k(sy^%WH{U?1FS=c1U&XPOIwSzPS zuveGnRKKRM$N9`5oKvp4w2=rSqxQ({&fQ1C!y8A4Cj=8FY_vP7Egta}#=IqB+KBXc zp1OP8oRNpfeLN+S*=mEv@)Nj(T8I_Xx+<5-td?{?m5YpS*`XEA4$S)|gqACVUMSHM zaFo7@XY%n`nQ?mGQ&%FHh+$t^j`o?P^A8nFqnk=9H#!XbkK4l~(N6O&9>OYvjB|&v zL;7kh-|hK&V6TR?>Ar;~w_$Y_CVC9clLVrGuZeH7%RfBtZBVwQhITF$x#zMN&g0Xn zhlp%00!cnHFj%eDPHn>93)Q!OSn^F3v2C~|eoNiI*^KSD=4Xl}QQ>}7+x39zv@w(y ze*E73t7nruL4-{MLIWh!|ClX&TGeQD{7Zs)_XzYJ4E%P0O@4*nJgXj9WZvA9gXj|5 zv||`rC#f>;TeRDXB`e3=YeSWpwo+NF8>zbeXx)8)9!muW*-$;V9+6;8MEbYCjRf&< z_DD%MxdZZy^0!4rnDPw*bdV#~9kx$ue%!o7BB6%$lG3MDnCi!now29QqeOfsb~7AR z*Nf^`y>vS_=e`yHHl(Sb!Pkz=Sa&5POX~dlYC0O*mU3E;q)ABZ`k4*&E&3`T<#L%6vHw&QGw|A$uHL~je`Hg>DolXUT zTk2zsVMi@6@x12zqn`|T_`xLuY>boeT*~qOWEU&-Ky<>nlpRWX!q`{}OyqX)$3y&| zZdSSed_hD{`!}gC`?ie?JvXHJ&y)A1E{OkhSzt#i<$|wI=02W>7(TKsi96;e{~r#h z|7l9osYd+JyY+dZValuD9U8})7xb5T<|aJH`52hv;8*);V3!5 z9scR3Lge#ANSL8&g)+OC+@EhcNJwY3ywL3aQ@Uym>_1XKNxb$0-aYS=pA; z7yN&p|61Kj`oG8fzlX$sx(>`mX=8jAk%ax{_IZOy_G5^armtL{5BiN(WKp#r#crcjs$3`SC9frpR z7ukYeb^h}Q(BU$W6mk;F&Stl?UU6M&VEnBeXW@lk_Nnc|Q{MjPas00r9T>ocYHag! zqxgTl@t?o0Q3DrhNZ{WoAqbupxsB|-w0X#Xc7;MA$NO46z)x$xr=;??Ht5Iote-Zk z7+8<9i@#{O4AC=KEcL0=be*=&?3Sb4mG56ozbeFVyX=}di9kXe z6H`lm`j-dAgz5>xiPL_NH}k}wTeh_qQ>TJp#xBSFzS>mgy6N8<<_1y2Y3WNx>j)o* zwW?Cpy(-4;^Zz``|Mg;whN;_%b*Q%DvPbgqpSuegJOaky(-W8vXnqUdaeb*f^nYFC zUw@6&gwx;q{|$qxw>lt92XUKcEJpPH@fyJ*I$*d4`%(Qfq5bz~s@{@yCRNEviy8ho zw9u2uDyxHGf|uZEHD6ATH}+&hGn({oPpUv#Cv#&^2v2h~(Q)2+;31wy>9)VrUxp1C zJT4~wcHIipX`kK)LhEb>lKd&XKn5f7CNaT3e_@~2J1m_^ zf;#%XsvG(@Y50HZ9fa`Z^ycinI_zImFz>SyrlfTy;X6RuUvvCrwk*fQH=R8? z!FPgGA!9oK`H|E6x5^F?Gk4WiP&U_b{`ngzMZIBH(2|>VR{6^{f?JIe1~@kQ@2VYyx*Nc0&6sjlvF^OD@I>~?>#v~%@B=J3<^Wn^ z#h@jyp5t%)03Q%34k3jMHM8ZvePRdSo&<3p53c`(UEtFyiJnVW41IAD_dJC1FRTGv z5uHpMk;=J1-1FSoe-hCDp8c7m;2It49TJ@T%JW@^UXjMv{w<_ri|FLqbm^C;K~HpO zvj5WJR&c-r54qCy=l^pf3Fv^C3`{O=qjju*`vfP_=$Mi!q$)8A>o2WDPvIG!%>6P~ zDb-L?B>gX$1iA{PCm8pb8dgvKJj1AxF%8$UKJk})`nOxY!~$It*#B=AZD0NQ+bSi% zMwFLw+IfRX6;|@bU;4N(jjSa*Ks&H=<*xqa$r#18%C4Y3k*$Iou%(Wu{`2z%3#CcR z`pzVVdNRG)EzF*S|NSu)(NtcC`bDoN@%(oeLjxBZDGRWfWdH=s$}Qgk_L)LhaO>Sz z#%po9SRjtItbeTyyL%mEI8B1`)>>9!qPqVY@#84>g`Wz?@dHbI#~TX$jbvA=i|eD% zPZogFvJhiuoMf-W+3D04yQ2TO!wDFl2f0gT4;n)kuh$c-=Pl~iASi8vR4;A(r51>1 z%nFL)B{a9?2MmFY74UbeO^ZK#p?d{0%J$kE{j)^mhocDQhF70~n`4Y1`me@QrD^^3 z{q;(l%KMh9A@r5^q0GC#G=tf45^crpw)1k>Vd$b`;7lwI3Wp&KY$Y{`K28!g9fKE zM`blMc3!WwA5=%YMg66)mOaQGXPWM$0gCA_D6*Vl>H)> z|J9-@67ZX>9~1L;6y~yv&PTK4gI>d^GU0el4-Aj}5BQ8i+@4eOMZqO~vfs%HLc~V0k@a|vsd!&+)P}(uSwA?A zoOFQ}VT|cL4yJhM#@DtS-m8vZg5=9)8V9Uc9o>RUwY`eP^4Q@8ntNu!Lu@6^15)BY zEPhIx{bzt0g@5+XtsZ<&Q?W_;k*HpJ%rTMss2wZtXS@3e#U)Zwmm}7DJ{|+B58i~> z87Rcv&cav-BzIC~N2zH;3O5J|D=^2 zdp92^9ayMQQwJk+f26yF@Lag>nQJ#}Y7NrBo`4M8SgeK}2MFjo$UHbww|=d?=sHn9 zo$YRJz@B2w=Bpu;Nf8>Wv)mVi*r=q$HFrU5QTUyt6AkAy{1;+!YWcbyReY9)olRr* zvEKz=SMu-8D%UOY>&u*fa`zbMD)BfiNdF2$PFOTUqf4+e&^o>@uf`z@Md4Ox7&W=o zzPgGHH=~o?`?%`*?|H7ZldQFEy*=5}*W=xgPHP^iiw~Oqqc%Sz1}vqMM_3Bf`Pa>z zY{hbos`&1kj3>19h&SCi+e#m!xMway@zR07KIe7ITUd#9k5;*gOHy|}^xQ@7Fll;8o{c{c2ux(&y zh{BJ(Tn4?qArt+wHy;j)Sj8K4@g+O}|0Bi~UowREY;rg}AuX-;1733ngO!|-1<{EA z1P3!y_DB9G(ynZrd`B5giT#$ivP)g3h)1R|XuXICfc?SI>&U9(gXN9(a0gH?On)OA z`UUnHj|V&GOw>%Jc>a?@0e}t0h9Cd6?oSk_oa@C${Lc}Hu~dVe!o2!FQSd+D^KT*t z;d~?^X-DQeLF$X7&qycz8M&#un>R?6xTi#~YNklf!>ws?Uih7>d-w`01jr zgQ@dF$7IFL*$kd02HwI}ylN*~f+cz0V^2AF$?DKo`#}Me8(>x1N%7%35=|7_)WYR> zP5c4iXb5pGu@u;?<=J*|&)bZ|TM-waJqQb#+K>R7LYRF%ye$?cI)87m4W$-;Od-{@ zaA(%N#eQ}q-&9+GALxcK;BwSi_cPe4vS+ewQy(|DymQe`Z)oy8igxXVJD`TdOwn8{ z{nUp@&J%bn&sEgg_GW#DMPFKW6`sGLdz9L zFhrF~94V{qw9$$0ylx1`&{uvXF-siz4b09T?|we#82O~g?sWdr9jZ_~NIbS^U{plh zP55}q(#kGD?^oW=n)4;o2RUKz){v0_j_a0Fg0MMWVF2Rx^RX2@L}ZtUC&p& z{Y;XXV(i9*aR%TL4M)!qxiAHTJ?2SX2l0>HGm!5?=nTT-QBE|T6jc%ZtkrI^^8P`| zRtXsE9bugfj~s=`Txj$|&9~A%vPz7z$A=f%_THhZ(82pYbu@Se7BuovVjJ}6i_TDB zbxXVGH|86011LO(PNKdHzzf;HQC_U?Vao7b6E(_s&d8?`YM(vp>j*s3>lmR<@0gWp zm5kN+ccx6Gv8ErzYN1I?k8Al;b&&r^d1K$ZHEo3} zY46CmNvav*+uBLJh!ZP9;%smXX8uN}^}}+`#m^6VpIRdj6Q>ejNECdG=flRZHmF@f zu~xyx4hXOx2_hUzZEK@SqpkRWUyb8mPq1j!u%|RzQD~A4wP!FI;1) zCB|Z#e!X`!hY{`E z5iKa;jM$Qo6E~s=f;1iHs+`y8v{j8_>Ax*^=;QXzqydVBy(%P2aK87)*{bfS7=FsV zhb2$lVCan~LRy!z#X8UhHIeyvoGpe66Q5H7e9258UZ}0Cmg_;2qiX1a5^k5w+v5Ld z8!E{6BbgiD(SKuM?tI^6)JolGWgD3gg@zW6kAf@cxOILQU*AT&FUxl(kSTHToMT=Q zVilKa;IuN(_M@$>OL*)kU5)Fm9UU%^>Id;iKkNSC^iQV-+|&*}`tvWXE@V0~i7;@| z+Ma^O7t)Jv5q8(zG7)D%@8C}`0tfW$MPKnpxACw1D+EK&lSnf{r9;axOA@yx5G0-X zFA#%xjbip)CK_-%eoniK`%`IHyR8r=03Zy`+Ea;*eb5bY(Ow|b{NKT~g~^m{VjW=t z?IYpj-m83X2PF3T#G;MgCi}iWP#h_YWP22nF-e`f8-iONnCo$ZG2lu~IHt*1#>9 z_}kEXf{A!qzb3!NDc7^`UhP)&dGJ<~mTs{;2x|(%cgA<8FDYlLVRWrwxv7Z`N%&AAUoVgX^kf~E$MgXj*U2)~cWx1yPQjd+ zR`zFYs=XCZSw225l>4+Kk4T(!oP)P%_>TPL=fSX_iC1pgR_qw~1rjay3V`oJ1mSwLc z_vvygC#HPkTk$o+R655DN8ZZ}?Swk%d_kRRBp{@R@NN(|Qt|^4T=T2g92C7&xi8I+ zWEvn~4xV4F@?8E5eOa=?^J~$&ud|zrHi4RdOHAg4aI)DCf5$;+RF`c>uZli(uZYv3 zH|gvon!l}{(zYP!rR-G6hUS5bva`9LR2&TW0Z}a|q}48#7i;|I9?YX#N$-AjLD^-! zFJWmK@_x;{3n1_4tA-l>AXqFJ8`g}q>RWJJa6d1v+y^1i%2~gV>hNryx%*^pXROJ+ zFM`bxT+0GHYp6QGTh=5?w*Jv^TA>*lTF`8$UWUDzDEZgOP&B%S_1pukUH{jpo z{*k^1`c$;9Ao;8^hYii;hj+jZEn1S3UEvyLO3GQavdmm!Tzc=?BnhuZ7(cjw+yjO_ zC?J5PKpj|FRoFcwHDiZZTmDH>*%3U!GN9rDL{~MQk0G4vvE>?F!$b(g-k-P>AnSz- z^{tDPKyV!rRoP9*9(mx-gHNEq%xReP(l9* zzlzj4@Vdba%@Tqk+>_DXeON{2_(Z|~NvZ?ku~P5DWLNnGhU_bt`D zxR&t`UY01KHbMWfFPH~#Q=)Omw@K{be-3%BC2 zQM^U2xn-^DBZMSC|C*@CDuSk)K(p|;>VHrh$)bY zx!AOpF&}%cf+sM<(iGx9f+hVrZP(hQq%C3oBzw(i?nzl^_#GH8ffS`WLqK|_M>W`w zmx4Q!KAMKMq477?`aDftI8HvN7bfoYUqG1GEZDGEr_PIi2sida|G3p$>p0#JDP<}* z)NPf*P|(P{k74bZM3ZgOx3GrGWY>Mw;!u%E`Y65Oe}p2YpwGPaPC6<^$5TTd)fQ0_ z)-24`eJ>lLILHl`_3*zX>i6re9_615xvjGfz{0d1;zteH7N?=(v$CV=8jFrAx>IWS zP8yxUpTupQwXA$C8g;&iPE;ES3)k!GAT4t}28;6g-QeZ1wZ`Z4HDx~3-n(oHsjRUI zFFPTJ7n5Wkz!Nn|{?$$cQGJoX^xg>H;W^{{_jUUnjj+8L{gPxS{{fveYB5*@DgB1z zl=nF}VlSudeb-LWo=9yMi7R%-An=@$T92Y=iBR`6d*(DTFbtF@-n>t_RB(>2=UV#( zDwgjd=12Qwj%d~{eK++F#>JB3%msBQFgB~Boq@c+XOWp->T!GtvphE5Y*&s*n>+07 zWgP=HT4tkf_{@jKkK@*LB}Rkvr|(Z`V>aO^p+^-|)l1ax?@avc)Dpu4yIWrsi* zTFr;lc)iAGjmo(i=1X@30`SE8=Le`J#cpeK9OFk%-DrGT#nBh#ciVml5_n9uktjvQ z3Zn5=j!JdW(p$TXB=oNLYn3zu6dv1rYxKY6LprI?e#aAFuGJeY!`NQ~DS0;#DI zxJMh|{Ey#I&OwlXKwk{roG-K>Lue^Ll=&v0*(H`8rO>hZ7R^OgHKgNa(rBTkY0on7 z{$`Jihwaqn6+qH`#NM{oz>D}@hF7tKYdmSn>rUo^5wf0gMZc}Q{VLb>CD4i)00 z>&AUFr#DBFW!mHvp(qfTp&C+SdE`>CP0M;KN=bM$HG|6I!hl585 z@)A`}(8-)bGvx-gsSi^Ilb~N;=`GqwX^Ao;O=&dDBO$Zx8?+>yYF(Rie43v>1iDm# zGe{DrVTp(k5@1{=%R{uC)#ZY?%xf$-BZh{>bu>^8s0s1C}}T-2*s1S8St-)eiIl-Vy3I zBGZO3n(;dt8(af0Q24T@(GW3KEd(w3dnv_}Z^B`cMv*D#lO1(5!tv*6VoWTrEwI>7r;Vn1F03Mh3blOrfQ zV5Xw+u9BnCCL0EYQ#)DKEi%-8%-rtKUpWBTD5CgKM}!X?xd;de4_%UB&@ zZMkhI#{dAQDEH1nz+5&F9d75#J&LU0n1Of9tFtR4=O(B?@mNpwMtyMysCA4nYkpvj znFM_?eJa1%^Sib{&wBroC-hNr8Xx3R&C76#(fX?odaNQG4+LNj)nl?$8=X8(GDxGT ze2}@%0-%`D;At>i2@aUur`Dts)}db+49KEJd+f;v4@-5R@h0Zqnn*6e64A{Lz(bo5 zKeRMN*UDgXV#Aq7ykUbnQEmQ47&P5DSv>!hxWSV{KjzY}PxAgu= z^|DZRi?V5egIAhA4c}RP1`3C{!pSh+ogvb*m27vX# z(+XG%>4?9Hs`Ef0#1-<{2w79sdepR6J%d}*YbB&PDroy2v5*x`BcuvLnAkUYqH&#V z;CBK7O9GCsH~3rX01uOZG1*>ey+;}*ss=sNi3^C4b^Fyu`ZD2oCU$`?>zKMwZq?SK z2(#2;Zl;_MECL`kX3S97qR7OlB#v^BP7~s92dg-dXn={1u{er(o8H%Cf64^Dme`yXhQIBbSAd~%6M(o_(yzt~@XtX4 zEk9qpgMu<-sVg~bZ?ZNu@CyW*jAS&r?&Z3h=^q`1+9#~Hgd}%hwe|PPCkzzb+V-!neGM{vT0f&Y8 zYg@TR?d-`?m3~~$6Rkt9W%tFg^(kdzf!I2?HY^>)IhUQHgd~UQyo-{%%aZaXmW;fK z>^lGtQ;(~g2B&s#@Z{Y4y^H2l^t1dO2%JrgUzb7HRkefZI?js^NGCM_a8NCDN-9|( zmGORGC5*qhJhsd5VLsO$MtpgDuyDJ#(Ahc?qlQ}i2+rGrJ;9!pWAppIJ=h_(f~h0t zHj*%}pk;as0L0C8b9+`3ji*J{mVgO+g{@1}Hdsq(r-?{U*(&SOL8n#byh=f;Iv->k zY_5@EAv);Y)%@gNbKFkg=e1oP`(1Ft;s$K77vFN#&=RO?{4n4GFocDU!J@FHtV{0u zE_x}wCU@yX6bs8%Rxs>Tm5RvjOiK7{$=2J-xtex{!`V0}E7lwWO{>swGZ}o*X$g#y zxl&Z|ZRcHi3lDt1)>PE2aNn7x6DT0e970@|o@lGE;|JjlK|jb8{?1t=;PG*8H$L6w z>@o`M^DiOEJeQEAo_crIjwM4spR5%MTb{X5MYd$8tewuV@7;iCIB^K!f+_QTsIbTd z#m$jaDz-XuA+E16HGSeo;$pJG(3pt3%Wn^e01oz8F*$y%*hsk(e2u>v)Z;->9}Jp+ zRSqWwn63~2)lu?~36Y8{3O(f-v=W+K%#FA~k9~Z9ZyTUL1ysGQ&U$Ay&K5r1r3c-P z0ITrXa@^y!cfU7g6$mblzL#Mj?4H)|g3`I-?w7Wq4rE&6t?>@*Yycv#s$Ig&Z1xnO z>-A!4_qi!AD-OdFig+01+0gkm(^Q)ndUrmG=DsOtc&wFh2Fno{T^pD-RUV&!LtXNm z^3F%Bo04w7w^mwScFLhMee_db>(Ot0uwFS7!(4^G=4=-f9#R1t4C!1K3+otp#l z)eFgEm=Iihc6?ZAJp==s&u$8Hs42{@%!29jCU?^x^0T{74Jk+$nHxZG+?k)kB=iAT zUeDscEG0GREaiyOSm>nWoH3GecfBFSx<}1P5U~Hjk9$<&_)`FUqtFge@IN^xjK6(E ztk5`%KZoxG#Vw-sl2%|9)0t1^9&0iVqcWkk3wt+!eLtWJh9l)T8!x*ZLnv|Gt5OE{ zoF^}?$Nu=f77y&1_vw6=fWl%g_BJ@`!Zm|Tln=I@PGzoEpsj>We1zfQErB@a_X;Gp^J+b}@e(-$ z(auZ-3&`9-)}7SI@kr#QB!~*CBd55tt99=gRnX$3NR*OWw{lXn&VIeV+{}>hv*bif zs|WGEQ$lAgkU|F8QwqM2_uLr}y(autSNj&JH`( z0>X=L3f;6t-!wIiB<(Boe%)VT+k*UL)|xJPK@LC8<>^sgR{}P44w($Ml>bhsmLqyQ zPGDPu<1~kzoxNq)W7Mb0yGI0c(C-K2pbVg3{w}Jymp)IQH~ROTxx&+1pI6Jdjvji= zTesXmEGEMxZ0~>$D*d}+RyQ17JbGw52~y9077AO%R17@k^B04TkYH~-iO%d>$b*(0 z&4XzJNlazpuu5L#MyD12+ZFx*KGU|1HB?xoonTiYVIW-O3v6j?C?>;(TUlbfSoTPs zBN;|xw*Y@`Z~(njhM8Jn5ZRo1Y+~3$aPPXf>HyNBsz^3z0FD;Awar^FXCM``Myy0q z=t_Jcvr{LP%#B*x{qS_zMGn+e$>6wz0=i&Kz-4Ml@>)<0CCV5i)8Qn6D-dlRrhmBv zk>LY+wh75;u1NI6hP(@u+Fy}Amgjc{$pxRU+w}>{XukUugSCV(qSkYm@E1rE<}Qk_ z;1v0LyWLE?$|7K>FK2^;XNnG(!j1KH`aDPh2QbP|EGZLj1tT=o8;!4amrXx?2s8UP zSHB7rh@@gz$%s9EEp`0TKOk*!#+X8PY?$|8_X_^H0EN_8xa{P+zo)l(ioF^rC&oif zboDU#RnW^uGx!qB^}G{Mi>zH(qtZmSfV4CJIC*k5v9o`91V7VpKG>xL(D_cnz2^hiF4od%g|K(PPvJ{X zvq@dIvcwHgxH6t1a!|`F*AUe~gdM98FmIHHt&jKslxb}O*J0e?i;|%abD+e#%M#ah z@3-!s_K1b+2mwU(g9cht*s*QLXm^KbS)Xk7?mr@ug+!^MUc(6bx+i%{Ag-HIcuZ)n zJe_zh;YVQYgn=}lYdD0Rz<yJ)``&>SKMs+{itrp-HMry)0mMw5+5A6b2S0> zF|dRWICUJJc;PjsUc>+rh2G}&hRrQV%QKk{1-v{w%lbE9dS2rQk6nF9Zj3O(D|Nil zEX`x9-cUn|*4H^6N)JM_RM}5L9*vcg%e422rcPVchfb!uw+i_zr3TJStY39f>AdGm zYE(r|TEA^lW^nCr=E|EY#yS&PhMj*CmlwNNuI4|=yvhSu=ya^gT9Jc0`>;IR&YN(S zEMQO^`%UuiZME)*lloo0O_pt_j8Uct)@(RV-5{+vr?p*x(syD#(7bcc*D^*Ud7w9s z29Z|v`uJgpZo^c@RqZIfOd;>7K?wJLt==R?=o%xBGQK{3P<>}?eI0{-Sd+zxM5773 z79X-8j|M&3j7=9Yp)jL$vR-N(Ac88gv%SPSzdaPLs+moZf$!SaepiNWdae}<7h$0DaEGw3WC-~+JXcTU)VkpWy52GA&#_XlNNQZ zmcfj7F`=KS)OrJ&+r0fq-W`Y`dY%gCfJ$1E0sVyv37nCW*01k)xDQg}ZegV~{3nnK z?`8Ia5yP+_suR)<&bGCD`c=(Wpo3UX5!rw^{}K>SY$H2gRp9Pa%!;f9Tb)6S zrgD#AjPnFg%bkCqIV92%cl?hk5lFFEq%yD6QQ^z8KF4g?781oA5!-F3vzRAXvb|BZ ztR_(kV?1*FCUGYR@bJ&Mc9Z)>-67+#@05^miV)i?FdHzn9v)(Fpdndz<|j&k;<8z;`F&__`6NtG}7Uvqnor zdTJRyuVKiadKqBbnRRwNvlYqyZ3aT$lJ863g`bca==sLE>VZBMBl#Bks>stXFiv@g zXf@HAI!PG+1EgJWE}vm}g;n|WrU<{wyzMtnj`eql{pk10!}_;-i!5?^1i!r65z`%A zLhZ9uHddeWX^1wPzF>0A8exwVG6h18hwRxe-4nU881BulMM5QyzuEFzPao;OyU+>B z=#Dk5D4wX7hk^ed9*djD5P`r!gF^F!3`_9xvCI98uqJ)_z8rm~b_MIyd@L7N zvpFW!YaZ`>8^4+$9aX#`A}qfkhOxt?#3qOKq1P+7-l$x;n@rSHZo5DA<6;(@^Gg(l zNC}01*NU`QdA#WJ(x2>sjM0#F3&!pr06UhBzsE`Ux#nhTCW2!ZCfL{f?|0fV`;uXi zDW0$5oPfG+^`=xcO|JEQJAT11j;`s*2xiao$}9^urb`_caJ>V_$5?D-%^W|8yU`(VuwPppnKw@oM5d z`npR%uZFeih%K+t)bbuJwq4Wdp&joR;bX5~QRhQO-l9)fQXg?G+-a9D?f8P6uO!b})HIbsZL~)9gY{nj>6u^L4A>>H z0aHqcE}9b4j7OhyjluM%@X##+%5@jQ{h`ydkhmR&;P@GjtG&SeAL{Ag#)#r~7^dQP z2!z&M5_pGB*)@`P_LkTuT-CQVhGtxfYjiEQ-h;vsKP*`ItjN8AMFLvwr$a@csve&ATy$PbKbQ@ZQ!c!dS{|-vB~4S+pNs%E zx^};YPTU((+2=0jkMpU4rQpPYsxgnM%fv7Xr|xhj`kjyeq%ORoUT37-`#4(HhH~5C z8M`4~$ERe8$|@9I_>5pPrRrr%v}Is@1KNEAYeRPEUhl5aGkLl`;7dTnc`#-ER8S}E0q7>*r;wjvP&#UoZ~ z=$2Hrreu2(jvc5rB=bu!i=(>H;nCpQ&(8XMo`}HvE6O!cHoz~niRC>v!`$+^&ZXp( zK2?f(>yQ1GD9?C+Z9NLw)e&tyB-|2_ulnIny&w=w>*jpZ?`753w?aDR>)LG zzwG8!8{Q1nO=JhKn0^h)d+vn!4oA`MSp-oiV2xCIL)M6}F^K_3- zYUmzkyn`ptd{Hov%?I?ah1_}GTWc)1L31iDGR>0c!|ye8rexCqu_Q^x3&0rQO+}j508K>Kgla*6Lk5vqZZ{y2N*LHm`s-)mgBo zLrj=<{Ayg?T1vtpLRG2DR;IEk`jPGSd4hFwTxJUng<-m4wdJRyIe{sk$yLLWo_w6X z{Krk0#Se!9$RqS_mg3h2EX_@ba?R1n5=#0>XpowS9;#c_8LB;lyyAmu+7Flp_`<_^ zz9A(eLyo_BW*lf3R}^IE8K8uR^qFJIATny#sZw9DJ18o(HvN}WojHBi%Z(u8FAIeT z(aQ1A7R8drCvlkdYv7O{862fPsH#Z|x(&Jdc3F`zs=Cl~EW#njz?bzVm(tRt4oN?9 z16+)si!5I5l%zyRUul*bIum@6L}D#LXEWuN2(ECZR)i>)gmLxE>(VGiv3EQ`;|UWe zUnRx%vIjvRt9>Zizeum3s9L;^P%~YC2C?>_c8X}7Bbvm!9ywyk?*@23pmf1lS&3FpNBj}ltlIDnC>i&=&jI!mV`((OFewAy?Yk_5n71d@Hu~tZW zH+`ZzH_Z69bzW5)c=wu)dd}VqocrP z%VTL!$z*{q5I5P=Wr+T*FnwLj=2SE(V3mt1zHg@eYLUEk)8IqzT`Ab`j2k`G6@~Wg z1r}$@x5YF}UQ}3Hr8*;)vY{j6tck?)%s9+gMiz}VQjC`LWD+lD$bFw@^}K1F&og{d zF1A{(%euBOB^3Q5KS~*4>AT0<%~D--Qmwku3i?B`30aTMQX6y{=o&ZyQ^SI$=QuOK zJ@P7zxUO_+Rs7xhDm!^@*y{*>36mg6`AR7eFDD_?taM8@J+~v(8k1i{UuTBsyC~Ms zS?{+sc! z{X2<$jUKsZ6%VuzU0!Kp*w_nk9WQ96`npc{C(n)sO>$2^PZ(Ed83l|6x`qFOr00!W z$kloD@B zPr^4XL4bpY8xTyz#Ec#-?|uT$C6K21a4H-rw2a6u)7@-}G47t}D!xUC8vB4~S7oUF z=nL!~3p%mD3f?xYSNBb#8R#P7CgssJ4@FSddMaFAe7Gqz9vL(9JAfXU-)KFlQJd*- zED~zXx53_5@~yxmN>IVvfA0CF=9!KgYqdfsqaZ~(%4?@F!jI;D>6!x~t=kWk+5|E` zK*jWVXSv*^OwizbTyiiAl0=`jqYk$Tl6vYn__1U~2vQR~QgST4^oqtnXAwmfhmSC> zkT86(Jk~3&Vr1fzM!WwIb&t7=C^GgssFI70dEWmz)t4M&{rbBf{G`o`qfj9#f33%M z(8I3V$a8s~DC4M6(=~VrZ?&KI(+t>iBaY2tSAr7b<>X`#dF?*sV>uh-neExRwPVBO zSlj~|H63Hiwe2$>YDJ^!MFq{#P#!@&)0E4BQd2aFTn*#X=A%z{peM0@(D>A?MQ2)v zCl=dfHhade_OlH(rNBQGOpSQM5nS-Sys%oKCvajiq)bs0UUI)|?z#P>^DgNZOU0Mn zWckl}k+GZ~du5S`Da>>5opZpsA;J%VeKeX1xR$gIle&Jok&QQVSDTt8=%vmuoYj820jdNGmUf zoH!li^Yf9rfXdf6VI4An_S0+Y;3#+`)^1Z&s1YVg5urmVPF1HFfR-cQofT1;qOn?l0C#l*mwQ2+r+K`cFXx&BmwkG$L>AF=Dr4<-fr z2iE+ouA?H;uEzr$Id`WrgG9qtGdqzh6z1sm-Goa^laX8Qhfzx-zhku`6N;_qg)T{T z>XuPYpSPO|5L_8u*$A8`SpumVb^~nwZUW-uGB4<;v7;3+BQ8Z!(BH#!Mzg@MT2Mux z%?rkV{*{a}vYz%M`iDeI$}pn0U#SoRT$LLzSf{f{u_c=O@QsXTQ&TlFd!}FI2}Bt3 zjFGNNU*rc2p?~04fHX?2_^2{Wlx8v_jHe7!fKc-DjXywjEyGfNr{W z;Zl&31>e(qWZG%Of=KIp`8g;QW+ z#FG0$gpo{z{P=SlD z((BSi@Ugx?=Mv~eXXNXP^iKUrV)@F|aWl=2`XT%niZ}e$d)0AXs?$hgKdA6B-`+bu zT4bEZq(@8Gd;*(9GKfidh3Hk?q|6)Bxzasl#M;`Uj<**ZIa5gf55pzu3~XuO<_y;V z%>wA24-#!OhWB|^->Io?Bs3=@@Yw9j^_u%K@9&=XW>JQG!S*W7jfJz_voQJzW9d^; zxbLF}bsNd)<^9gg8JL5`u+vJJO_RdD^6S6-oFrA&<}2J8e^1jS?MtV;kOd)P(@DIm3YDP%&%bS+aP zSXHqaAwj*?2Ugq>kj+f9r6_rlUxU3!m~5=oZYlmGlzp%g*}Fm6F4=L}Ei!i>W3k$7 z%Wiaopjja_zF#^K4-1|k9q(2QW#cf1F=BHm`M*h*LsdmkOkV|A78RAWaAm9|rcyQv z6q%Fpa`E=vnJkq}B~E*y^2?C$K)wQr1yM;_+sd(Rq992F0+xK9is&BVu0l4G)%q28 zCX5ez@;P-Ld8-=lBN!fiV~w23jLQyCu zIj0Db&AVp~^=y0bdD1i127RkK7d0B z=dMdTWgl$may@wV=F77*riVdeQDGR7FKpYa9G0n`35y~n2#f|P@N|FCr-cwGqH{;I ztb05YLLU5{>cd3tPHC8ZSVm7BA?$<~fsp1!&+>$_=P9+eyeg-wj}mzo(R&ty)qWsV zMI%0?V?#`eIOsY+Bu=9r;yIQ)G82-^i|`E){EuGJ$o4^ zcyP#1Ku!VoAoxSKj|j(kR3&a4xpt6jzHorScSIET)BNVca1K$D$MCCxGjFU&S9=2) zn`5=UlE5REi{>gQp>sC7GgRbBb)&cB397q866@ocGQPfD4RctJ&a>6_skW&6DNO4o zQTQ4vWJU6rZkxotG~JhoyIBO2JbU#gC)g4E-bAIiV4R!9dc06|>lY#|e5l97i_*6r z!a4pAO);3p{DAZK5Mm8p@AO|4Fsrq;F@sybRAmT7WullQkpyEokw69UVWEQEW>eZ9VHMac z1iA4RXul-)>O_FSj{u1s->O2+g<&+-61d{#P|~izVqz)}0|Zar%JT54(Qc%&?DDRb*Y66I-NF z+-bmOz~Zl0_q&(_Z*T!b${tUvHb6FuRy~-X##&fm(oQM#7+mj5Skw1>K+Sx7 ztfH2!(O4N2dse?8qyIFEn__H}?rEjo*$qSG1ix=}i`Jg5b>zk0Y zdEH{o+_(R2yGIbeiLtYZ=GOaj^<)*%kcMyJBtpnNe7XF*q|j>8$Kur&c}HTLZg={^ zH=@(pZPrH+tunfd1|eqcTbmT|?DWo*p0{v@|8~0#`Aq;bTX@_bcUJugG8ld4LHGoG z5I~89Rc|D<2R1$SULc*R8a530p!ns^LgCSKhVsFQi9KGqlbbn(vNhJh`41&ehNiX* z0m=wyHl5_$!>qJ`&X}HcPj;(@4=3-(H$R*WVCiDNTbu-E@n1*BUZMvLIowoMterzZ zepqlJmp7bD@ZYMyV3tS_f8nRomL8Env*z>J9|aw$>c9pzn*gbA9-(l|GTG%=49=7) zC4_9c@V?yXF$-T~t@y%RGDU`wl6q!HumRL%3^;O^28xFnZr6H(EL8QL-k*6!iR#|< z228ZK4&sV3<~eA3Gg44O7Nn$f&VWmoYcFFJAV|6)H53KIhW|BDzp0UdVZ>cpSUu{) zpNq*VD*xc+@dGUwcPT`v3MQ5y8w~8QZ?k;RiQ*4@NMV-E#h#4@>J$nmH}sjJS_kX& z%BO&nFjUKbR@3yV*^e{sCqgEo(0|x@Gc!XeheR=kUHjEn= z6$l%yiNQhJZQ@fa;A5+r20io$KY%9&JR5wFj{r1cT~4M7AZQ9XvZ2M|cbh5fdGP`^ zONJ~nv;Gatn$vp!Eowv#1NHr503t9?20p7d*_h`@O7cle3??{vGT_zX_2&gNndJ!ze1<7}^lOb3jtIl)NVm#z0($ zB?M`FH_B$JP`LHK(S=WYe$Neq$OwVof#4K_9QIdQij#wVc>{d^VfJ?)=On2Uiholf zFAfxf3%afhi1-uy(N_|A{;fLuZbvS^vqAGGG|EcS0ob(Tb;*YpR-MW9?7Ot-tI!1N!0iW7YPmxIJbhqNolawsQn{Glvea)scWBe2__L=@ zJ>a2ZPiM!Qt~t#wULxGVX7F_(l9O64Y~|s%9Z4j247~-?8H=aQLj=PlrY>njVjdEs zs5UNC;PTZKqzHU52M{9`yFe=z4}|m`H;A#~yA^WY|2-P7aFLWVPkXL6WQ4M{>a})! zPRxeVP{MrZnkLxlDhuC^QL9!eVxX=jNpVQN24#&>F9l-)?BTw2mcqSX-9B*Odl}T? zCqMZn-$1xw&XKZ&C*u?^5RW-!<~Me7QE3YQEq5s`)NeOUF&;r|MtP`9 z;942~wu8w-JNx48VNE7gQ#* z)>~1e8fDc63*gy6MSe)>=be12`?Pb-a~QzzhGPHz{CfDdbzo%(OZ6`>NxH>Cdvu?X zS85_UP1;qUjDmnpVS|*?Qm(9diGhX#-(8{(t*aU-m)b4NB1UxNnqd#+9LHu%Tt2Bg{6 zcfWrOBUFu7R6_qNc~XS`?c2Y>kih%s=pNjH*ec~m;+X9-(drk8;Zty+XAb!(odAv`a7)zXf z{1p$hP%KXvvEBc-Hxr|(H5t>zI5_}8occsjuIOPWx1* zXWq=EqGJ^j=~*SfDSmy7kRN19`2({LSIEQ9=cHg=O|3{iiflCQi;&Q zMAV6O@Az_l#7e`EM_L@`-@f5-1?!AuQ!Tw_-HPZ%o+2-ZaD6?1KS!#c zE_K@nh`&)rP5r3K(XOY%KuHU3Y?0I^*I1F$RTW`Uyv>rrCYV~StRv~~(*gWf*1)pL z@%QTGzmBVs^Z$Ws;-R6bI(2^$g;3~rHzNUzw|spXW}rw2zOZE~KH{y_dGRsGYJi7H zJ^$I5yWBVM!R9|`>Bg3-Bmk(bW`^{?=%B`WIGqas5EAFmbzv@Beh-JvQa&0SV8q8? zPeBo9mMFU@=c0vZw#20W-9ZA>r?ek|aGykQ{grOm(BDDYzq3y`670b}0L76C3H3MP z_%p&<_iqX~u!aLSeid&~4!=fxm&5c}gZ{9=! zn(E(&x>d5I{|eS4GcDMkS_h6PmK@I1C|gWptXr#gbwuJ8GTP0rf*>U zWKTZ$e3*16X%QpXR~=vI*+B;AS|bRjs16)2s87`<6Y{Fpa~P-n4zn+99cQntYwcteMq zM`=v8JbmBy(*;Foltc-Ibkd&zb3%*Modnntqx2|12{oYSuJx=6h%gXfI;5dS;^Rle zdc=P<^Ii8&7|&oPHOTv~3WiDb(e*2fT#PX!&;nz<<60}dW#)hI3)p#q%bNqhc=n#h zka3xdwu+B;hjqh1z+6m(bSz}iV56lc0g5JT&=v3#sxbZm8r6SGtIxn`2#o|OWEGG* zc}(9CdmHXk+%M-#3|a}D}KcV2-D6doRC7WHdCF$40><>{BhT!DxC=+ftlM zbqk#3zbeP6&<~I9-v9#r1n0(XCSl&R*HsCcM$b5)WZbAvJwDU$aRM&NOj&uI6M_(3 zGE@70w2im>I{M+|$qr($?Z8Ad<;#yA&3oCVBnTMa-{fN)s*lvNVnDGm-nh{U~^hx2NFA%NS@z6hDk88~^GA!s}2xVONJ4 zS1JU`;>2M2xF77X?8^C?pc?_K)B;^iaOKVau)h)f8$g3+7+l&YKK$(a>r7FxDopM~ z^`{Pml6b5ftZH1!`ai>`S9k&U1sN6F2(|2-Z3TBTc>ReNFbHcp&s(8DG1L>*4}^*4 zMidV~`@(3o`@bZfPnob(wRbr4Ry?+XfY6ne`_nq9WB{lMHe#L;2cf4|5O z!J)By?ydfMr2B!2d3gz;Z;M2lrOq*IqlX@tpnmqD1{jcI(6-Rf#esQXZMjuge?N@d z>-%ThKFIhTpm+;2MURg@iU}ghf@Gs|FR6uJ860fJ@rY9DXq9~4L5UXhc<6qZ^tqYK z`yX#>rn!QDs175#!KTv@ESIC@9LQJ?!$+zblNtQe$z;W<)p)6Pmi?Ej0l$Te1|eo( z(m1g5ohNLAalO9HmrJHqb^>*p7K2$2-=eSAyfi()Tf>M(Ug2U#fii>e(Arl10s1u? ztEHgw(VAt>Ix#bkVd7zgU)s9nO*TbNn9jQsgP@nNzcWC*HlQN$Ut~(WtXvUz=d{p~ zBCmjj?73OU?H;R~YISzyB%%)i6&4kli2e1o@9P|XjJ4Timj&JC6LBCyVaH3SGJSLVbPcy6{yTQnNQ6I~RB63odt4Hq$sBx61cBIv(=IeL9cVM+^ z?IZZyM4Siiy%#DsgGZNJXfI4!xuZ|9Lo*Z#cdghBr=twfqh+nHLtFG$wHf~6*Pn`FO(kh zAph9bwDQXfc?s%!Q4MeDGp$^9WAky&^a7>8>Y_t@4kfa!J4|BjiXr{gvI}%3P05E> z=RnNN`8w;+%j{u(=JtERyR)Yl|Lh^#m=TALjf^D;=*6jlg3uGdJj8|?DmXGtO^)$JRrUb`nr7N@%{X-1j&cIw)12)#=s8_vMo$kzL({VT! zrx9$ZesyO!x4>&!_#qQa{rxhTSnOxAuhL~I;5HY1&I}fiDY74vy;f!lG+>1^m_GUPpTD(r9e zCRn}U7OO{sa-%?6*WIS}3!#M}x_EB>ydgxJ!~FHbrE=L|v}|&g(IoU49aMA{l282B0)id34~ntZ;fH)Xh|o*4aYB zd2SBlra)$jUPo!QpJKbQEZZQ*X}$?Ahkzp%lZo+>qzCE{$A??-di#>#t3JP2&0Pr1 zTbfFuXZA{Dm`b?c7>uCgAZAC=%A51B7@WPHinskbwRcN>mY86I7Tv)^Qw&a>11it2 z292=Ly*`^Q?D!Fg@F7P^h=YxGn5n=e{o>s3hOczN&J^#($oPv^kq&*{yv&rGZ`8j4 z`l0E14-R(4yJG;*^W&X!nj&!=1y+V(>j)eHrQmTDrmj5JmWv?(@8;c2h8hF79#i>o z4#1;=#{3X(F9!W)FJW=iZv~ML4oR%-Co327Aiqf<|k^w04R6Mojg;*Ot ztKL(kOxKQ;x4B~ep7cJcBud!qE^15#@9R^!9p@^ob~DgxW--dtwm%Z1rA7vp zfYg`h_tqZ}XWOY~2!G7@BW^fd_*fJ<9RX?lHvzKuOyn#;$!SAh+SUq)$3r=#yaxPl z6OY(MU(=l2AtHhp8Puth+Yw$Rf=3j7&cw$#F)W>v;?|eNh`6Dsp>PPSGP%q9NDPG; zadv%1igeBQq~d%JkP2#6=`u*5dq*^=PN=-igBIyZaKD8(nI~eSR9@IC0!Mr{^ntqw z*(JR^JgKTUz=7=^g$fAdljUF9zVu34Ru|r$@9%nv)fB%Z1A_! z7be2r@I=;b{4DU*#j%C6Bv)+3j`wMuky-%gMEg|e_L!~|*zVMCWm$hCOyBU={~j_L z#@<@vi8TI+JhUm%{suGWH8|qSaC9j2P-p=f*F!Nxo1P@F%Cb_p`s6njD}V6aZ`+?q z0#+l*b}0ESvO*Y-y?P7TN42WM;LR>;iGxbPN#Bse>={DW(*BKmkH2P75+r2TCZ z)<1J)Ce@ZR3GLpQ6x+-ZjGZ}_?stiaA&g2upM8P1dftXvW}{Vx$%}$u@^JBCi zoA@RPm;^@y3vropp;w792+vvRg@@WPkC*+`4}=>?XRfP>)nzDy4~=`*KJ+uhk-VZ7Nh3e$%oToY)FJ}su+1UsC)S_ zkLY8(`fDt!RRvORsE_};T40sG1)UukBdQuEz*B7=e~`11)GogH)-|XhL(;Simu8w& zOQZ{jBae|}7$_w=wb*?WvKL)%#us&YlHob<13{MB&I`RIZh}j6+nUBOSU!Ke6|S}d z)R>ess;x^*zwbw6=?ks-CfgMhIBq4x4z4?1J{lijZUfYGwE^V#c1Bptg*^}%}lO7wUy z$JL`!=_=|O!z`r_VPRs0#I0Q2MtQ2iu{3D$NYf}($~#E)vGdt6F^oC+qaBbZe6o$| zBTE;PTqOo~E&n=uFB^VSlD9N*$Pu6<<}2Lel!7kAR|hFiza;>5F?HKYb9gX!Ox|>j zF)=)dE7giGJMxXNVW!3yz3Q{c<_u-VEhhqEUOy_;=M{)z_6y2=Z}-RZl&)mzjCc3H zAHil_P}Pohjlb02Se9tTG~uNZK!~ow{^5(cphi*4NQVcV^U~Rhb`u>(9G$t9vwf9h zXfH7zcw4Gh)+-(4PPCG6r1%ZX*_tn}OSTX)IPpZYMH~L2zy~wfL6=-tJ>RZ?`Be9( z`8{=ncn!6k=jb(r#8sM#ZnvHChnMd#?!3fRnX-@(-GmzUVZwX0UAlUB&gw!eN8%>w z-LTKEX$ihh`)gXl{t_<~8G`E;zuj;`UyvXNVZ^PhM@XMM!&3bb zvItA^@}<|kU~eJ(L2uE$qMSL|pxDc;CniKr!9a``@^w!iORT=eJ5|)SV~kR6Tt}57 z%icjuP8{Cw8Me|y&i<9#q($3SOZL0ba9HyociFVZI$fMtB(b#SujKS-7WW@W z+f?Di7;Sg$Iq@-c=fLMC{v^WQERVn9WBCyPg3RZ-sW5hKI6wygT#rKOMC?F zS!^A(spIMRpD0cM8DPgg^q6oQ7wl>B?MU_h=saOBdwQ)u#a=y4v~ZDLn@JcC++snr zH^VF9*ygoQr0scZmU0$VbjLeGIQ(;T^D;lr_;qiI`3Cw}#JSAYktH5}qx zT%T`Hpo+m9^bBBUP*c!L#)z{N1P`el`o#v!(rX>ee0P;ziV-euUo4U*7iCu~NI4SFuS>LJ?3HqmPI5rDf&Zk$v-L5{O z*!|7;yBd!BtTZ~Yro^o+rmSp--QciVY7=*K=KEcY3(CC|Gr8=vPRR&`zFltX-DkWE zhHk1shTkD%A!QgX1Qf?L{yp9#Fin$bgjT<5LI3aqRVnwWMd&w%eX^W z;e*ZiQlMJuU}*Dxdh)XLc!iZ|6RtR5rYP#xt%ZOjNAzpbIs;zvPU|>a z$rG7w@*)JFM>)K=Bhh*}uA4uL)|aa#=VAw{)<$lqAg_>-u9=@}G9o_*Lk^!nb0Nqh z4<>eG-8K~p=<_C7!@f3(p-wShV1>-=@*@_iHi3RDrnLl)8OjL(f%%JRnYs8|TR%Us zzs8a6kH}9Oh!qC-rLJE#`ENo^vF6lAgrLxGI3VQPAet8yeIO+OC_Aa4Nt1Led>($=t401DI&tJoQj|~ z(q+rNw(d)~5>FZ$o{z3Kk7F0;bl!9blTeOzEIwE#mVR#?;X$5tS}dFsDfKGy$9bOO*40Ze6njY*>94d5CNF>(QeEE!gI7RfEGU;Mg|WkX7_swRRhw*keoN*f}HVaI#hx#Vz`m zR=ED}mf8KiQhB?zdLgcYX!J>uX3b%#{6{MOzHkPa0isJ?G0isHaOcVZxW64`?MBC{ z2#IHnh4^_eY!(X=i|k%9l77(R-VxB5B)h9&A38A|cKgh zQNIO*QXpbz&;_~mQlc&+JeMu+n4yIBJ{*hp zfW81p$$u|S$hg4SWlE})#Fty{VRQ(${z%3d2U4`)&konB@81smpCLu<@<WyJSN>i3d@GWTjGPMW&!Z{A?a7tXyYmB$pHq1%83kzGMKBAu+Rg#Hp@qrn1L#&Y z37paL80XNw1H1q>OAS$S(P(F2+y=)JW%jE@onvoB=L%xPM@bM!!M6Keq3{4xs$iy& zp6EamRA8W?g%>@oaGYvO-(rl?s{A5se7F;6D5{>!@BMC-lFOWiNg3~%O;n9(yrLoA z|J=#|>6|Xi@u6MpHY_~VxV0b&Y|by@0jGFwd{hPf6L{%{0-><`kth|CU@NgjwwdR+ z)-iUBz1cs1Zc}rtVj?l?wFX=(<*PU%D?k0qj_EIgte$YWCE{2Jebf@1ieA(cU=egaoT;kKlIWG-=cNHo zrLAojHB@feCJ~|f`x}5)k}Dq<J;%gFi2=Pw8O1}qcsBBi654xYvA?ionCD;cB@lA!@=&_Zx z{y%2od`7T~3@vV*%P)uj(+35iMs{I(XZ@4ut&akX!cdlL{AI60D5uIiU?lDyBX*M^M}guaD}W$Vrj?FKx6 zCGPNU#+J(rp(}*TTRs1Ki{0E4b*f`2+&A6Rw4rZk&M&N0{c*Cq!h3TH_2$Dlt zf4|u6x+mPo^O&wCmThG9-(l}Cs2=>tgJVTOX;I--6mP%((IgSE8A)tQ&sZtc;2xR! zq3pY4-Txb?B2keeqC%VXg!Vw>RcfXWr~@t&jwFXgpWfq^cZNwRNF4+k=S6%hn;6GP zpUT($-sHPCnfJ2ymcYa2F}n)oG;>Uv*9=`2SCxTM$HR&@P#78CnV(3;ZLkJ1)oP6e zJN|wEAP4(N*G{rE;3YN7_F`G+YVULsQk~j16gne>`5$9{a6OV|6uKVxo-DK-+lJla zgIQOHyQN5RgNwA_sD_^m8EcWL|MKe#&R05(G^Z0hBL=S<8G|I7!=D5<+zoFffN41fUeQyeCi~!ztC$zsR{nO#nq;z`T;11+e|9t;q<+~h3J8ECmsG)%V>jRDKbxmK z2af>4<5=1#LB77c4HQP;IRU&_=$feko$XoPoAwFn2%-Pvd6LKjuAb9WDq)C}^Ks$N zwz!@#EjfI{-P>mLlDv5tgY`oHVpFN!Mxky8<*mQtEYupB1}u&VLQFTVyqhUv&pZL< z?3n#WDS@1-y=Q;z(iID;^`AZq+jPo0j)SDB+5%!&ZS)Wo?K1htZK&A|2!zX&*|XHC z>yqdNxl2zzMs9gi=yua0h6Y#zB`5Pnb!qR zcy>#FV~$Z`F={Qsl+1PiR3X&SKfoxYx(1y_^$DSCjuL&$$M?$m5PYaxfaC2Vgs zibP%=feddZd?CltT*b0#r|{ zP3BFNuXbJWWoBz)UONYnwEyp*V2qkrgZ-?9k?{ln+9BH#APA((V2EFGKul!xF2_ zi%;mNSWnyj0e+ax4ZJp$nNn^p2;mrFW6xA+AR`r?1#iEV2(CpnKBa zGu(^X{RtxJjiHJlZa1jnkx%}Q3jyn~{eECK}KmE%1Y## zFnCdPIMw$*nBxSwNV3a;#y6+bkH&ts+cV~h5a)!;`QIN&Kh_X z+5fTRA_MYMRD$g;xxS;?*n&?2{KQbb8PAU>FjeW}Or0n)>t}(pC!c0`Drx# z?5_;<;@VG#mTTCs5oys>0b_Pbl25C1hivtl`FN6zjwwqav_7ch2z2UkL7(dsx;xXv zPkwoN6uU6I;ypF}yY67y7?|}^|7YRqh@VwK%jvL%d*eDDnAGHeX;)7i;P}s;)FvlT z2kro*j4KHC-$c>9HikX*@!{(r=z4H_dzGL0T z(Z@ySVE6ibkTSZl#hw2{5!az$%9jXzABsm$zLWON(8ix76Vx0 zvchyO3DiD_^s#JP8s{x$EqM=>G(q=i#x&pQRxQHgGf`svEMiaOAKA@RKRqbdH-I2^ zTDWDrdmJ~oHv}5CYM20lvPEd+2A*^icF#MiS+VSDaWXvqdv;0vk+sr9y*w%MhtmEY z;OEuLbPSrj#k0rBBYz-NUGy&_^a$C07~N$j1g_tjxik+GjOX`p^*MNs-Zpw`r1>|> z?zg{(6*8(S0_(;)?P^(#ABE>4~=GM!Fy zIT((qivgJ23eD+VXo_FzwLB3=F)*@Ed`Sx48ngsa}WGPb6|A1;|a-I2_>wMOFXE#^=zVFB_x24;8Wj)E##N6TbbtL_V z5KxvH^JbX7)lJ6)i69c6Og>@y=LbXg)oD{j?L4c4sCHAFN%2kV-WkkhzA$^9=G#aJ z@1jW+M4<;UgefBlq0V~a*Q$*Uv1{j1NwtUr$o&m|>h8QHEV}d0BdXU)J70BOYHkcw z39RREzIVsc3POy_*I_@UooB}*lhC82xifhDC6^OpN{ozK6wvUm%m?^T-ap`*9$tTN z#Tkfg1VM*l4O(T5pbVG6=GzbnmIBXWzwZnM{!2D)co|Bb$v3DFd29~#VaZ{osEB>=3kig0Ws z+r;>8kV8ugzS?4(`!@TH3+=H7ZQW#T7KCxXBfqV+VRvad;(p@vN*;MtG5D`y|C#FV zVgCkwv7hVjAQ_&Lzd9QE2*poux&v?M8flL`Y5TPUX#t6q$#;m*>`BB1N}HzUAcmaK zW3sv~T!IlkPh3;9!pXy9oQybW<@9<-s+XWDtA?Dbm?#pu|5tMrmKsA*EI94wlO^sB z78E1ekXBI!BfeU`KpV!6h^Y-*iI|VD2Z|HfQA1MXu?W@mcC`JVkN>gFQkKtv3GE0- z;Kv_*KhXNcP4FMe?*Kgu+AnqBjcFak(BsV;ly-r=R zIcCFr6O_zC3=g;{ac>iDAy{T0Oy%^X+M|D^o+js;p)R28guRQ)8$HG1@CA{gZc7;Q zXNOjEKYKO3Rnm2}ZDB->7sdfEH_*4P6Cov{F@4$NP0tEdJX%4-lRHK|!SLc}#=-gl z6*??Nze`(Gj!iLp?dBB{lV-@d9$sUnat88SD(>E$9=Yu!W({cg_!@M>e%Fgdt!12| z#ckzpV!?i^UC>7y&78cg4KH$5=z(;7;r4dZ0OJ+p&YDi~>D-IV&VB1Gx-z_4CLOltRAlJi9F*b`i6x)ZJkqt3?__CM#AR$o~`qi=I5G`I^ov|*mjs@DX&nP3cWA(Z+lcm z7aJw=U2He|s-b}Z7+F8}s?iNs&=%H@vf?D_-IN&d@AshEt3~5kk3|f+r0$S?JyWV_Qt)80qa5Nr|T-NQm0G=}{M1_A)lJtzM1&xgKWn=3<@N)lI~ zAVPNdi@h&Q6OP9eoXUJeaN0X#tKsu!btS|HD?CDX5S(>?9*h{z$wNj1fx!-M7&g%g#IqlYy>_9#}oT1J%GaB zfl626AaG#J2oU#66?Sn=t`WUQ(MZeRXm8(|mirF*XCfN6h z$GhXC`)SgFQT~0CIf1`8U$ZA7IV`X;oD%duV)d^fqCkDCwmDMAnEYHK33FnOnGR> z7xn=_c4-0|L|1FX`(J)&g5Vjpen%6lOwXbaa}hhk zNleaCrfGeZ7^{H(TVtDS6am$pDD-y?H$h``{K5<(p_YUj7!QW(|^Ah_h zoEo3{IGH8}C$HaPQ?4a065S)DcAN_Lg&@4FP(*`@`90|f&K1>Tbaaz+cuV@*C1da6 z#Dos{BbaWaxyQjJrN`iR!uK-Wt{5J;XJGQvkKN6d#X?yDH%==3<5KMMKisUbM!p(+ zNHBFI2a`rJRZU$TqpehRr!{*UjYby9$bkdA_Q&_X5n_Zx%u#|yX1Zsdq2a@Fl%j(0wBcPZ+i0in6932? z!KOB&8NGTfUHtS9|?M_m#i?j$-2^EcG|Nq&Gjd z5xt2zMag2BlCg|k^Jw++9+Yi2F8cXO9L*@A8fiJAVt%;PKJ@x*$dVzT_hy)jiJWs= zevBx3RW=C3UaE58LC1e#YoV0_caq2yGTEk*DUMHNlD*CZ&jHOGnhQ!NIb*8?&GePv zpj7P(h0)D}Pp4s0ch&0l)DsbwRUQdD=%A-KrR(*U*c!K>17p;{CT9+_y0?KxF0^=@V8o{N}L3vRKS&B`gpm>Ql8M zsc+H+Qz?o=q%?ZvIxk9L$Yxkd%sU;f3q{JLn9vS-hriL3Zc58EEd$M$!#rwAEzi@0 z8o3zLd_-b&9t(90kno3%hbfA^cdM~T)wlcFI-lF}t_XeK7QmJo9j$u<_()@-gdMBz zn);$r^P22-u*5I0Bl+YrX9c>QEio0Z-+Dzt{oA+egqE+~R7!XGCq>unU~aLIcI~%} zP&hNnlVst3ph+8ICPw{03UNqey6}I)Ljfk!M*q{|l5rtp^Ygi5OYUfB5J_&_S@%gyg7d-VO+saSvZx&qH;&ngXj zC+*6}*4snwtr2aX#>5O6H7KVN)JijxYD8y(T~3%l8rdSli|G!Yz=ZseEM}=muNrw> z{T!F3Og8=AGj%1@v)rRY_?(G)PgEMa=^y-UGHYej@z}V%Z*78XqTks%n2TAggcIx? zeE9BkVt=xIGHjX=SFynSXI7`|GxzP9ILlPkDjsi1Ix{FNmRt_==~nqaUqd~ESS%+( z!s_V)uatwbG0zhy_Q2_GoOH;TWa-vufyPD>8zsu7S zq~;n^@{4R&gFNp>j0AO!uziBtvuZ=3-6!!>L9t&AX`J4s$~2KYg2RAZ^`+0CEODTl zrS8W9a~>$=jW`tN0-efTYJzgt>Xc43$@c77|J^$5#Z{%)&oYTyKMl!;-$dC8BL`*M zH}?1ocBKL~vgyuJ0yhI7)B%C<5z2=~gbCS8IHy%D|>qQCzW9+acI$A>?lHvj&pyUmv$LOsCk@|IN8g zp!EYHVqOjvrjwXP<(AI)4tq)HUp9YT&RtLT5=LsyyB49H3`6#AM?_d4bNzHl(e z5K4B=6dCqb;g~jdc!h)vG5nWCNtyJj90C1>XzVp`!R%U1jRHPmJR!@LhuKg}5$_r`qBnzpM8{WrK9vudb+ zpYO?Nwxt-8s#O-U7`c$TWu7x^z7+_asvgREzw&F7_b)|3C-c=`1SrSHU}TSHi&7A7 zc@9mDQEbFSDS|dok^Ynx2B90zR6{FySd2ZSnO={d)S}zs*~Vo@`H+)|b2oi`XHc0X z(<7!vg~c-jfzm`j;vM^+9NUr};y#@yiEU(4NUph~i7=_$@F5rP*xBJSr%lNq_4Dlh z3B1x(bN>i`T=-V)yZhWlLd7!P%&F+q(cAIxnM1CIb=Cs^kqxNvgNpOzl5Uwdd8`t3KWMJnCG7Rn^dw0uNc;&R+ z-yT2YDXv4+%({}JL|2P_%hAyPX4hu`b-Z6e9#^0AxW-L(r5v>_j(+6QxL0A~t4YJu z%W3Cci;2DuOOe6!svm3btxfj{SHPrd=2Yp9Up*bwolEV-DK?+IG~taT+5Vzm;UsbT z>$um%={WdK;c@v5YHW0+)yvh5wHe9#cRS)xG7O|^(Wo~+6UYWpRXJrRs7W7`P|P;y zHYjDK(uH{@?AvNz-iO;}y0$XBe!TsQ%MlLBdar^LE79y;zfB;Ex?QJZoe8Bb8XGlOEe*YY<~yzH46_E9Pgh$1Xp6kPn; zWnV)FPcrszMX1W};CTic1fF|jhdln{pGXZNN^A9<+C^V3C*>{;jPRQzd7VUDr!nzE zjg&C20y=h>;~j6|(}Y?24DuGmX_x~u&XwCi^mgEXxV~%*yYLxlQyAgj)#N}{F<-Eb zWf`4RskqM4;?uPws}{hA3a7biPo))Ro?s>T@jOIvSc~`30Yv$@i&`F zq|`5bHN03E3C5Xem}nLf)I5vA1wF>}cm=#3nY3&Si^P2hJ3k`RCbE1&H}nOmMZeKI zht#Au8-Q&;0KUfsn1^Ro*@ zMJr)bUCt#q9BIfU3D2QU(m;HJWtgSGYCYX(w%n?VMXIQ|S3o%(hg7I6AYE&zxY*D# z1Y|76x}$pF_BwXu(H91}-b`LM6e%EYB z{KZ2Z3Gat?N3;*esv0b+jQBlG`nl*j+^?)ca`DeXJmSj3Z3MWa0=-N88ff0vX2s#yZFB({BqIbr+B2bFzVGT z?0}!fDecum|7;0v{Sl|+1C7f0gA&A#(|_^310uDkYqnes8;NWJ^JVv^G?@Y>pG>$Y zVqXLRoHi;W+*WE_-!dpWHvJbRh|`cqRU4u6V)0BBHX!yC$3oe>QL$z}3O83Aw$v|B z`@YM~E~k+yd^sZ_CTs!W5mErbeX;)IFB&970V2}&ezs+jv%pg_N>{Ac%UbykkSVNh zQktYN%Rj|yjTNyRONYKs?^7ZtU-k&(rmd{NP7@__kA4R?;49D`i3ue~i(cMU@!U-P zn}RnOcd{ov-0!V!sH(3NF*H|&0E!62kD@CCpNeNw`kUH#dlvfS=X021=a{5 z^L>)-Qjr8+3Dn3oW4+mQdoUN_lvAQEI1FJ6Ih1<2^H%p35ax-~7Nbk@J_W$$UzeO3#8p#Bn9n zs}T&$zFchAZ^Tllp=)8?9%BC~3~CqO3^rE7e3_7sORj>!yhmLn14f-YnH@U6_|nH3H{`IP~7%D+Nb<9=9@h*K=ip z*<3EsE`-A0{!!RIP}mCLH8JO9X8b!P{LMv3gVYnfndHqch>?zn3efN(iLcJ>Oo^H- z=qWr3dnu-Pf{OI~|Iu{TaZzsF+lOI5`BT1gW7xIz+k~LtT(TSKr?c9?{thL#(ApWo3;pBO9A|S}N(y+RcGJ3xio)ry;F^De%@( z%E1K;o)0GQ`y(rYrp|o8;Wa~ZUlre((Ey4~y^>rL@90u}XTT#E^Fx@=!OZv@>F0E- z15_S8api7FS5|`Lm3{K1;`nu-__rU^?4s`L{ov~8u?-C%75+lru|C=r;=U~4s@%Mv zDjIqBy}HuHynEo#$G1-uyZRlF|Fh%UGBRjTo3Zws*fKuKIGrHf1cNXXsgGsP%V7O5 z8!!RZ5OiIu_;7vBLMOEnN}7!M>8sw-&ySXEWX!pCi_OK)#-L&1Pg)qskXv$+7#T@V zx%Z~WzW?u?Bx2!Iu=b361HCHdBvAwwqu$?!HUWws$pR9DnTh)a$TRy5D1 zadnzCxqatW{fS)5e^MhzMIN-EB_pxGE%z=*0MaIudLpbE@U^URbG=uiYAw4T?UbhA zSNEK450(8+b7$HAN@K9~rHkQ-R#)}erVvFLAy9c>$VT6L<^BiU3^FJ?br=u@UHX)QhC?k>%)fOcIUkWpHoaYL+f<`Fph^z5il_ zGb$Yp3kVMCTD~Do8HH5t%s?$>?Vy1aTMN-wN>97j)pjlzUQXJ7cgPy}4(T8Np`*7f zo9F7wp0c13!hyBKW2A+Sa`zvI&MGZ~My5UzHG`-bz)gG!jM?}}0y%Mgbk@Vbv;9|Y zQ#D7ti8u56$XSOz-(JtNS$DVdFtY=szsjtDB^akrLQu9j6L+219WRxr}@Uzw2k0jp})y9r+wR< z1-xi@%FM(fmxh8|XMm|jK_q^N5_r#T)(RY^ggVk2R}=mGHTPu=Iy#LtT<~P^+t(U= zt+f}0fuGG97GhbvH3A@*#Yi{OBOe=*i|5t87HPva><~@F~?_< zlfu9{iOel+^7CStd1hu=pk$oq?nR3q68Y%$vxI$zC$%hK1M{WBY)!K3lKOWdb?*DL z;18Wl-rcHqq7XqXoKXOf;Z_smDhK2rvV*Q$s8avB(mrRH3bS0~pM8)HZ#}~c-2a@H zR^{(*_8(bZm_qhn$n5+DAZ~s&SAYEw3C4;emT6D)l>1o-T!9Wl9S!sWAN+4^gJ!wg z0B5(IL9zX_c(o85@+dp!! zA6zDJah0{q@2w|O+ss3N`>8DNtPQ+P&|W@-YJ)$J>Rtym)e!2zc98;T!L6YD}iD$M8_V;ea2-@VnOt98BiU8}K&Un9?@GQ%-m%VgeWOMiE zdmwa1?b1ZC4xUe3s1r}^s7zQr1PP3in}dM3za<)ev^k^;xj9(N{f8MGKrm#c0l%4K zvG;bI4PXzt|6?#eX1uQ!Kbp_|0X}3+XcPbCQ6DXCVwmyt$WJeW}$w0M_W#Me9vGci4DRT zL9SVsJ|*d&xWSIrw%b53p~j^M=}Mx|5V!@q`<+6#Ef@o0)de z5Dh0o_!-a-LVmG5=|cuDN=+!>TYFcNl>Za==Rm*{AcLf2XpnM7b}}OM61`nq$W}LU zxs{tcci+NB_{(qBX%1S#rxB=Ka&Bz^6+Q1Vj zt9cdz0Yy``Z^?qK-$dPC!FNyaK78`iH6SxiHMX5&mQo-`9X$tsDV8c2dSdzy^5>$I zfAV+U5lclDu@6uw>`%-W>1z0w$}EFhqm}Gb(Y*bsA5nDGRPt8>gyqCQh`%K6<0U2G z!MtwThcc?lr~!m2uzc@?TmP!0(p2EfyaIRbq1^7pGiaPvlV>|P*;}cwt$D^*K(<|A z>}(Zf&~x_p`XF~Zc?qG_tyGBJ3>Nd04)!e!%gWE`Aw`26K+KLrq!Odx-#*I{WRNz! zewi@R5*O4T29#DlN8)RtY}Z3Ioh))}?&*MumrBYTp>HF@PI7#H=D{~M#f&j4xGN6V zNE9QLe{cqDsFCy>N!(u2So!2Lse8C3ct1 zH*o8)OhC}}nGNS>c`@+WDXP{)&wH3`TwXstkxOn6vIwW1yn54D-POnNEcD$YGHmiw zLZ2^JwxH}eKGIYf0>}Sf=YWFBO{@-HAs6i%d%W>T8BV2~cOS|W zP=Qh@hP!vCRsRRgV0+aD*he{JVid1|+FunO>|2m!v92!CVHI%!2BcivxH(brRnwz1 zey;u;{v2+e0COi-`ST&ut+5bQ=~eEpH^LqdJjD<=eMmGo!m0gG`ScB+3tm| z+Y0mwVq`MMdbzPWKddm9Pm?9o`0#y?RG_Sff192TbGje=jf`V~xK8#SarCMRR(wvAFLA{xzcvpGFSf<4P zAneA1PiOfe01U1)mLQ99lGxQywARC2N3`XVHMyglFlHRLB_cHt_24e!x0 zSc}t@=swYTI0NZvH<+yIDtRikSo!4}Ckwt!s!PUwmvi(yEQP_#_w-YYCl0Jkw(Y`- zE$7XsKIyvpPGye$P~^4hre>nHyR87u*xCk_^}=h{m(Y;gI^GUfW()8r&J&ql6zoO) z0mV*=N}p`X)Bp9Sfl;L+Se^yUvz3U&!N1aD0A);(c&eCHNCsJ!?rTFEq$N8s`-I?? zvj?$&7q%zi2g{p_xZt>?MPR1WIkqP832)f@WOJY^3}wSt{rdQp0urqpfl)FAAc@Ew zfnmjmMBZL~Ky8Vhd}<~^tP=S~AW1>l+NOL+c%C~+9^c2BRES7asFVADyGR{U-#STN zTfIVoWMFzus?~`Aru&*rJrJz3EZV*9ZTbll{nqjS!l-n7nYIQ7Xu(fZIX(F(R2FA= zO@*1FL}n^8sK(N?|33#Z-(5IxapkIVXSxCYT(*6B8S`&GA}F-3qvQ*R`?{Ur-?uAdXHMe`Td}0WPSQb!*6{(5 zwLq>7PE3PcY!53*-}^qeCT{}%%;;A{MlBN40`|%m$UlJ+dppVvK&DTH-}D7v`b|l4Va_wta6EEVy0H94Zau1js*%oAK}0Zau0bb7ph&4Cv}Ck0*Yq1IFKeqru@HYDh=UZxXnx!w=TYRz z7H+ls#}4jhm@V~EhYUDC{_-nD3y3qnOlR;0RT1u)hjqs4G^p}{z?lS7g+{O%c|SS;)MYHCKd?e6n(c+Bm~~v?X-fdx*M%phV=$4{3Uj z8TBSD^g1eE4Q5_kMpCnd2aV!x)8WZCx^$}NQ07#5G4K^3^yy~gdLTHR0$VzYUxh|vnh{alNN@+S`t32&Bgw|$JUY04) zDTovvy8;zt)bFm|t32BapY2nm4|q^at?I40#b6U#Vk4lKLpzWK#N2hfnWR=|BMlSU zQfYW7y!wuat=?y8@&EDW%()TbKqAQr_+gH!EOED*W;{zFfnrbd3B&W}LhM{#89ubB z)&r!XO8{Hpgoct3Y({yWEcRQTmII>Nrwfo!qX!igR`CJygd4M;T@~is*+dg7UEl|U zwhybH)fky&BgCi84z6$fzIYJ^gIQa3Bd9=A#^mqOIVL5IggIpjutym9H0Zv#duL-X z-<41B*JZ}j>Vm=kOSdmZ7S*KZKl@r@%&>yL%AqK4MW`ZHAoU4@*I$x?3pVhiC`d0u zF>g#!#d>SA4{z%qxyvG~Ul#hV0Rkb7?IcatzdGVd;|5xc{F|aUjnjryb=zKcjU40H zu!WTgcQ&P~w;L}Qy>eduy?lVx01Co{sD*q~vaZ&y#8$Tu@`DG0@^w)ur2JpUcS9-~ zTC|mZntd`IZH&8zzvpU#eqjehvt%0CbsPV|wL9l7r>5Pm97G~eF=<{j5l z8_@3_E;Xnb55-=aI39IFG;Se<^*A52e#ZIKpQZ1;Jd)8C ztvD-MuN*O*)Um$2HQ=b|8NWNf2q-Mwpk5`N1@N3Z|J81#m4d@5^RurVuZru&LbxW5Cw`PKX}Lzyf!SmL7k)H@#fz@O|71iXUY%G?YF}ooD!Bmmfy) z_!*y=`*JW28;&;EM6* zAX&a51}t}CVFpdZ#coJZrK}rjWvz!w-U?>dM3}ctl+)A@T1g6v*?+})$KIjx(h!IA zMU84~Rigi`{CRV)=|G*R2}%iZ@2?ZA$}Co1;BM2}yG0!3(qUQmfv;;_*K50dm*^mDI_5J(f`=IyaroB7!m7H~L+jQM}l1b7K zz2G@@xf*ky0s;b7twwWEkO|kNhrRbsDpdZN_3RV5*xl4rT{1Y7x{^GoLjk3I{)b^& z{ZvwZkGJ(=HPuWxo|Q%A-PUIRRrEjxJoBVA#hcAh}7 zEg-zH(vqUOatRNIJkuT2fUHcqcZt_x`L!C0qwuU-uGL`HTz-vGHB5?)%rfjHK38-V zKg}30Fwa9?Ux)biy8lNHfy3T0n)3q&tIx;EB2=h#T)5uNB0d~!fLQ|^@0b~SF=S^t z12hSY|Gd^e1ic2;+qmNaf(?C?!?GUyjg0m^(RY}JRDA`b$mCManBP)ASp=tMi7;`M zj!H=osx4e6F{%ISWEyxHLJO_m4{38hp)XAN=U$NHJRyc}vo&+E=HD29!`5GBpxuSf zUegSBXMbgx081#t`S9@z<@oSpbm&!Ry|3T)$B^f7&3O5$z=R zmtuW_M1?!4C(3u}={e`$1AJJI+W_6S7djt)lO8G9ph#R|&t!Ig(uc)Yv9ZezTMq-) zP-5(;>ZY}g`a3HdyJ2%$A*4MIY@f)n4#<)zp0}LpQBNEBbrnH~wku3bNoJ#IIb0)V zFvR2roc8}9g^g}NplO~#6)Es+kSw24T@SBADH=YKTf>7p4@Pga{9x1h< z1(7r9{n%~?H;FgO6gw_Uw&Zf8ZiQoK_Bd`^z$&78RBfGB#vR-H9I)1ItuBKlMCBe? z%|?rHe!u%cKTZD-UxXtJ2ODx2;XMFWm$3rpvRR)m zm3p+CK9))n!tYnzuHN|he zx{5fF9MKl*ggE_SckV3pz3u_%$*kCw-NCpo9{+BlQ5PUP*Mt_F`jp4-H$>fO5@2sX z?WEdN(!EpDe>jjan;sov)zS32F{QIz-*@`+Vj3;_Qpb7irQDzr>$KhVZmkpPc;1!o zaEYhTr-go&6f5sZu6QRSK`_)bcaY80?Ym}@N~DRD*~`#Pa@-WBs4u)Yq%ISQ|H~jd zNXU`SM3D}E7%m zCUusC&tRb>XMN5sbuKt1J%*Vajmb;sW8>LL%>zmTl z?Hw_~A7vicQNx4L0C?u3-=AI3CWY4h6B<%OTK)5Zt@vA zr{$sH;?HA=A+h$zAcGfmFK<0Q9Ge)^DolAUP0x_?@^MI{^zSAQ#KcJgSTqUE_7Dx_ z$}L7UU+`l$Oae{kxY34e)GpGmg^q?Sbkg7lOwHGgYGJ$KjX{GOFAtyXn9dUEU1p& z=U2WUucOeWZD^R;1%N3EC#IoFQ(3uyU^w^-9|(+4g^uy|=$D0Ub@CFN?OETM8&d|+qBag>0}s#U(865XC&MV4sR zs9XOhScVh3_NV4H4}cj_qx>}uJa%s)S)(fI+Uxq-hgitPv)_)*E!j(%_%#t!-n)}; zjS#cuU=0i8I&HmwK$AP45ac&0Vdw1r(o3iRTY~$&IH`_OGP!#Gaj$)zVawc> zyS9`Hz(<|ZXRDNM9PcI+gQR(0*s>IU{=1lc9j4WB^r11&b9siRK?g53+0t;kP0;+>&lV%GZG?rdnLnc*U}izQkCA7B@-P z7qDMdTl8I@W2x%fKH(R|PZD(@To@YEOe}+Rxo%3WclYEH(TC>Y zS;<%mE(GgTOas;Xb3?>rh7qnLt=5ToGw2)$eq1X+o4f@fn$Q54%nn0XFroSIk&+N6 z>~`Haw#w_zfY)-CQi4Ho7KX{ao3P*>yDhD3Mm03|VJLo0{PPr0O+>rn3clyMmEuI4 zQ_l0ACbrnl*$c=a<7fV25sKtBf;tzkjd&0rl$A)f!)7X80aT@BsJ4@$W-!1G?4z+Rtn*#F_@}W# z9s82VN8Rc^`8|SsG2I8VX!LOLZRA~M^6Nf8fUPtn>;4b29+?iR{QucuVyiJ@NqML$ zK?kl#L4@s4=CCNFv!nR6__U*v{+efNZaBPsn96Cy?2%m9bR;To!{lkfwj4Dx z=Bey2YM89z^m?O_n6@ba!Qe=J3)B7PsF(doqF0GEV=`sDu9Bpa)CX;k{M*4|Oe*%I zvxOU3*+v!q^kPrlF4}0D?AU^}w!QZ1oJBk^$dgXqmqG5NZTjT6>Ij+ePwk#_R%!Qo z-PJdG#$LWhSPnILwKzY;oqhLnHPW~785pepT44T`=oz0o64uJtU&Ln297#M)b&MNG zCZfda@#N0D4k2T8D1L{5(pzBki1{gfPYW|{Dlow5g&3TDywr3|oWJRrbZLWUxjlb>$df&lX{7HOOxEp)I zuQGe93FxJkuci`TizQ|wnPHIL?@EIjkab8ti^okZP%jNEr%%h&RzIW6I}nvdC3_Gt zli3xe;QpI^A^C23(8^Gxu#VxkvE9vb+{ye=*Z8_z9aYhG{vthj-E-O8XP~vEI+I|< zxQi=|83RiGBIMo9s*h}$V0NIbWo`FiuBq;yCpnBElkH0$+FNtiPZr|Yj2ckEhmwv)t$6P_j7Y&exJ zo;SrEEmFa=n5Rp2lK3|z%u0q_fS!@4HXfHQIE^}4cNmN|2vYq~~9rzyIBCyW- zWQ2Em-eUBtT`HI8!iU#~%aPhPsd()5NtR|+w@um_ z=5OJx6_Y4$3TVas81Gu8->f_RK-U#&;jbT}|AyVceX8AXfRvmI;|mF9X;$Kmr+Fnu z!|5jCG{HgJsOpmF>~_5T-ueU1mfGiu6_NMLeN6Y|$X^YhlN1oF9-8o3A`2ETt$i;4 zEarPm9zK0-C_2{{v>rA>1iKujA}PbT#?N-L9(fJl+MQVOdIlbmmcSx<^~hLX`FYx> ze&&UN`PNEVkPSvzU$jowr2H*VVhd-#Trs=)$TN9sY}4<3POI*nJ?gSQm6Hhy^&uV} z=)c8DMK47#4*6>ExTXzH&nx4`=@69PvzgDgl&1Ifjdo03rJ7#19A|7%mOrs3Waa42 z*Hl^`3z`mpD&-c!athSBzDL_f3NP1SR6P04z1YluhrF3GBC? zOrSL`!hyqr-t+}}<0EG$1w%wSA2p+1mcu_h4Ze{0JZWP@@d|Q&AEGU*zs5`NKWywfE5t5U;4vN}N-54^4xn#rx=fIYOL-V|JPZDl@`7*ZZPYwU~i? z%N&kULeYl}Ze!SAb#&V?&L;S7S9jUX=)7PwNJLc@j!RRbMUrep@j;pWug2@{p|-Bq zKgo(94uldp5}p%sau(+JfTl=qM@qFALZ~y&PsQ}zKi#s<$-dgB_=n@ zQd(XfDUGVKNIf5MKOWxPU;N>BK9&6=V0cT=>tH`8Q*mpU({q+9hv9dv;KkLO z=@Wg_SExEzknwe^*Lr$A%Znc=p=%~FytdGB=?cp5ZedH-?xP-olF_ZEo$J;Y@QWdI zxqJ5V!^N47rja^UVt1s>C6Al>vDoI_4k5%tol-LQZrZu_(>6b}RYK5?a^42Qb*WvR zaxA?xzN^L3Evla_2F}8Oi7+P^apzyXfBqr{ZkU2fZ|sZ@$Sb9hV*7n#P9>)|KSX<) znZX0UvcZVaZ)*!xRfIpZJsin{TST-IVBHBNlI*k$!(qe*w%4wA(xFrjU5v>n^M;*I z!3gb6nT38r1P7c<4!%vy@%khMhjW`)?zIP!i87V{a7&`f7x}32P2P}x*ryr>?%U&r;pvxq?KneddH31c=jPi)efo}!3k+xG1|c8RT{gJ~m+yl)H)ZG>8n#z-xf^#M#!Kvq zoc~mDkzQywDJwtgY?$$Fn&0{Z1uSvQpi4!Fa3j?|iO}dk1oL~I_zEA>Z(Zt6japY@nmq^AX z3^gp>e70MIk`*t5e0@0*0ORcJZ@SiS>?8C92jCGex(h~F6Tf?HI z>y=Y76YYP}A|CA%H)gmEt$tBkD7{cKVqpkAW@fa>Cx`iDlHCVecn=J0{%NrBnW;VLF&#_1-u=nJz?7>YJHICF8fD z+uJ`eHSl5BQG9NFRiyLUOpHlRQj2|-w?KPnTvsT23AeSDTUiyeBiP_&87G5qY3f({^X7k@F}qs)RCZ&x*VaiyiOU#we_da4KJlyEf(nZwbvd zxuf7bb))4=?o;w%g3>7cXioe@;-2k$O$BDH&8Kxz28A=e$^oXti~4Th>bUP*f(58i z0ljZEr1#wor=+P%0Oz5Wr5rz12Umem2cadQo+kupt{rTzyHD)yUAEKkwE6C5J6xr_ zDtMo9L}IS~fq788qn~0i8&MQ;i|!xk>*yuQ=?C0@ zEBlleut?AE4L|8}?9SR2kJ$A%MKYvQPh+maSKZ=`e1|f>Z!=nGurdUPw#gDnkgZ83 zN9i5JhelVFsWC9`vxs@}uei*QBm{d!SPrv;PDx z)f-KqB8B}tLw~J2EV7eZ;;T*R)|W-0X)RYV5)LBR&1TgE^A!D*Sfi{vQTey+I&oiH zF7Q2jkZq1QT)w3j-ln5}n)%603PlmtQDXWB`rB+M@mns7(dHiR$MYTVj32V9K0s$v zV05SE=u4Kp5*mcKKT0YZ^qs1`Xl7CB$NsXs+2LF@D+h2Arnyt z(}7dZ;EH>9R=PNeixF%?I%vi#>XZ;uH;S(J&j1r9t}Z<$cObEMAKOA|KagJ8CD5qk zCAy@r?pLDaW15Lc#dW@AH&b0c`vH%Xkh@{v)~Q@p4r!DoXtJX?HNb7@7kiL>XH!I9loRtSrm7OMlkYEgo%7+3r7>c(1(a9IqfUpx zsKILLvDHE9s(qsdZfZQn$ceQZoq)BHs%ycd`mgvfKSD<4eMXf!S$gf*ujZ@mGGf^cXllu z)x6F=9I>uCNMB8`OemXYXp6$vG}u?H7oQvP2$-$5(NbkOBTV<8z*R!QPKn#JBScIV zN+{QftqstPl8%A*gOAyR>Mox({GdqTXEHr;DA^6E4UqrGbkl#pR@w zrw_X+w;jwNW>d{TDv^H$kc)81fUB;59=-R{3r^q2V9@*Q2kS>!w686fay~G53Y(M- zicN!NL>B{3TS;`@X#k}2mw$h+C$ZXc9_KyAg@7h20E!onW>ikMOhQp3th=(;rS--N z4lRO-Ynn0^`iuG4zb2u8bkbrOG}_{eSAZnsoN~tVyV}DzJ-7b4;{5sARyegxkkca> zCOiu994~@=I}=>phnS(+koLoNy3^NguGZn`k@gSW-4^)0*BG#U0O&)O1ys%bnk;#` z;W?F)Mjjm7C|eScQFcAUxXXtznp^Fn9>^6Oj%=gDds+(eTZCh&h3++5qIu>32)Ll} z1O&5vW_(*y4yRVbu!u15UU=R@FHHT8>v7&a++D!!AM>?a=?LRrV@7*}tsZ4V!Vrsr zi>jRC^7t|^z~Wp%t-_$PV8Lwoo=m|3KfJ^FMgbPb81z+OUmwB+Wt}bnF2|~$<-T+4 z<)+p`yL=B*@DxLkQ~Ij9Q=%t5Ns%}#;QEY!MMWRz?_j}c=n=!_7Y-X96L*#K25_O| zp%rjwjhsEY7LCR_@1r)l@R0cN1;;U&?fOF!dj#e}6++=0+=1{A!bco~ zZy(;5Bug<&pV3?3!*wY+RhKO?Y^Z`GJu3%Uuv5VnkO=OCbKRsKnj&|r8#K1~)b+e2 z96026R2W*|8Lp79xigtnr319_=&j^FHq_OZCgYM-^F3W~Xw%XNz3(y+79?!$u9t>- zLdx*tHwbH^u8G;Ln>MxhIhucD8>K83{Ocl{_!_=q*Z%6(lc9m(213j(y4$eU>5D0g zeNz@qWw@Tvv%1Qq!0Rw*G&GnaA=Yd+lq>Z$x!K+f5W(PV8acH3uAMA8Ir1F0Puzn&IO;5P@e=G#60e3lL z8H7GdqA-jK9T9$ndMm#0u`J)go~WjoPhiHDIzIdvhaC+5rmK`ZCM$_qv4`@Oe^1C^ z5GGauy`W&;d%5RJtpTd{jfVf!?QO`nU7P#R-8bS2t|h*hn{K7BJ4LTF0y=+zUpi@s zgV^JGMOZg!TXfde6nG~dsw+{;HF)6k_KLM$4Oo=0Gy}Z-Z%#Vq}B!JS6rGFyrYevd+if{VY_zdtQ?i8N*CIdlEpF zR8_LJfVja&U8yzT5^g9jN3rKbx}?K37wzB04b+gYLpKK;PzU-pRlDMI)*{e94*e+pgq(6;Xo|=Ej-cH<3l4qfV{!t{0_c^ zGAybwrEAflKLC&jl=7-^`D&z`XDUZ4%)TB1v;Z7CLe)hdD&Ck5f$A#^in=n)OrYdv zf|5cvCNYhSp1=iG<2%&Ry%NM;B&OYEHaxgW7%;Gqn`QtKckL8N9@3F%aQVSR`HDm1 ztuRk3JCZdF-vCiuQd<3(EC>l+Snw^nd@LDRn^S0cl;@tQvLKv+A2vn6|8%8#y&`Temu3!t~=A_gS{g@pe1Z z9;0ASHQk6GJJ08>O9$xeShV@33%YT#T`&-mMp zfPjNhO@qgiQiF;&|Lj~J*$vY^ADr|jnK@S=W$;6&xU`$Zn0o--ioqrqx0maXA(#lt zf=BS(Esaf;e@Q4j5Z~h0eNNDi5~k4qK5lq zFvIh?|6P?fxolN~n|epX-+WdbD4KRVaE=}_89FDi_k?{*=ZV=5YJ`#K&Vmv}DNhu^ zC(^}3bteH*IvKuyr0+~v?IH`~kzG!EYKr^XEYRoYOqCVDG%~NsS$*5>FMFKlgKM2* zO3bBC=CzF-8^v=(nT)FNm_9QCe@znhJ`KVq)&8^y7v#)-u zCl(N%#pAUdlybmDW=tV)&cf+_GI=5hK2ijBvNb|9n8;#Kom|IfFzqanzv84qs`Se1 zB>G!ux)_hz!k$WAGh%s4%KzffzQrB991%xry*OS5a}CeUO!#)o;M$LaaC5+| z5QC&!N9T{T`aJjMKGfC;tHA1Tt+~A}9)HW83v!cMQ5YofJzDMV`OzP?=7;+r5d-$C zKt86R4o=iaftwnQF_od*=3jnfxSzVM)M$pQ%Zr(eO$*qQ7GUx~2qijY@L9-sUv9j% zVmKeztCL7UT_T~Rm<$oL5 z1lNdKBk1=gqzG#Jk@TYKzmMG~j(qgRP13PR=M(cvAgksqd+Lc+=)zRR&H$CX zV_eADHukCzEc+{9UBm|=Gtc!KT`e}e7VbV~uz@4>D!%@`;&YlR{VCi8RLtE~rUP#r z+*vfqpnBz*)&9f?J~~1lA0EuARs*(Yds@tDQnc(wbIlLWc_A0(a@Js5rb_Gn2CS)syb4*%gQkYJNqyN6S*UWzouE3GRJ<+)3X2$|`K}mn zZ@7Z7X#`LG3=`y}2+rFA_YDs-#~?Gc)IeZWeTZm?L_0;{?BDyo?l|lHg{Ek+S$lu> zU~J;$hjM%y!B{wNu*qLTs8qR!ZM5IzHId`L(oz@kAQm5kaUS@vK5vO8O2N9JP)nvZJW z@N5ece+f3BMgB#ck#s1;^P*SkZ@y4~P%hb7i##qAsB5u1Q#D3+9ZIT>2*Dw88T-?O z#;t`1gJrEL-7|&Q%g{0+tx?VP1#uhFC-$>Wl;VtJ9X4j^(#0QFErDCUPDn5MQ(}g{ zr05CX)9nw9I`rIMUkAb8WMjDGgNte=0v0YsLhEv=(r8NyWo%}h!>m0QuOO0R<2I**p zM_CUt+^FLtpCzKeCs!V0;?N?YZW71gf@>$i3dq!Z%WF94b#G>kf(a5;g@WL@2ha&% z145klqThl*I8M?Z?}sLw*OqQw93mp5&5ywu&O4hj9gDNvQzU z=EIJ@B<4=A`^tXy+owwcdwj=w~ynn+|r@6ShxutC4^+27-Jx6u(86C7>U!j+($>Ly)&BrA@o ztqFN?yDRL~aBGplqVAh=S~y8K-{`utDPViHphHlA`(k&7AD>=Q9Exs2%Or6d0ttfI z3wBOlX1&xPIPClas)iEjVwNU=dxA#LDp~=SrUYscUCS-QPa1!&PGf$Jn)&Ss@pu{D zuAVQ`hgrickYM*dsQhy_|I}G(PyZ6B1PmOur@y`{q6_^Avw6}`@}vxESKt!dMO@9b z_?^1~N@Wy@paZ;ug(wX zBdNyAj2eot#lFuc*Z%PQK)jrvN|tKU{35C*DQ!yXS|e#mQa+%v}Sx+8Fq~%%F6! zIFaTq>$WQlyc~c>)tN3;;Cqp_&01+cRzO)1y_5is1q^(CXS+Ys#m(C=$~?ziQO+Tt zLmSfuFoIMjwGivu6+HXl&{ktE{TGn`ratZ9kQ8~sROc9WZ$K`1!s<_8mLl(cHaXn= z_o*b<=c&=L$|))gGvy|qduX`OUWiI))7WOOeDP}>g|gAfn;sdUE|U!!q#E1=ac_pv zVr3x-Z=I5Yxb6F^ogA3`5%^Tv|87quqVPx=774LF zT%K$xqI+wLc<>j7R8TNACO+5YHp-9)-CxiO@Y>i-*&Es@3tq83n@MBU#DtrI#7|1` z%cEX;BD3qc>4M76t~hzvqzpqvW5~;j4=ylB!chv<;J?zJJiPZc4He$D+8xsgsaH`H zNVs+k{IQxj@cwB{_<*;$Zh`Z(-Sr<>=e6LzXS-B5W$f86vn{_09&6>kPsKQv+->wI_%h4&tKNp8`LdDOko=%@kcog89HJ7b+G|w&bs#lT_lx zz`;2~^C4!SprGv_0#tF)fVucb55}VrWFTpKx;gar4n3@H!NF&9Um9$5kN%4xhCse6 zkYqfIuL;x{KuEQK+#JrH{~h=F7H%qWFxZ~>RNp+{jHMG3HmunL<%q?4U((T{slt!S zViJ&YRA;$QrXBpo<~ez7QicBpS1?1CK0V(_%vbmM`Z`xV&4j&Z_#5?QpxTT1xR#M- z#FB^&(>HUYv-3=taahFq?yCFWgU1~V!apQ!pVLVN`qwTRR9h<#-VO~DkX^e-``_jmh#PvE-e*i9WGuFdC>1`UkMrGI~x(q|Oq zT~dN7^$(U!Wl&<>+0o*Io}Z|26U)iJ8<_U1S|_23aT8f%E;Jga2&o?^p$jK)y8eKN zFpg~$tO|UfmO|0y+`^-f3yz4D2IpIscMZRyNtBo|tI5_@M=k@vsjCbAFoHhNTLjFG z0$NqqFl*Gx9;2iR*p?T~LkJ3t|Uqv>)1XXx39I}&*LQ5Lh92B0C3t$TTly5tup4M$HH*%&wp_wg-2N5;Hs?d->QL`x>x&y1WVS2_t7wL1NGo_!fiL0PefH z(B%FTl$v|D1DS&L*xCl^r}sdF0XLGxtf5p-5@TN-JcGnA5J744bH3qu8yx2!9_872OXWd@`N`8)`%m_4)3sAaIb2DmdJKT|cjmTPuutm$z!6-B}M^SoiDm zS7TV?JtUSRXo*?$B{DX1t;3F6z?V3KBgiYkm67ARYncKu%U8frnjor9cDmf;TWf+R zIQ}0lD7m`!7(fUH|L_}-1xO9VRk@>IU;Z1||I(6zVn%T6KY$rl-{y1&Mb-C15UdP` zxhLO3xIbOnX9@LBYkP@U-jCWC{^D~2BT9)D%b@~WI#?!qD9IWpl7;I)AMJxn@---w zSVo!P!oc8>Aswloq%Q?!9$SC~3_1nHPfK&(;UQ5X#bkpwNilEV>^*-OW5r`kAZiy? zVYS=yfR1NAnGF^#rY24e9j9Zb)W3uS&0sEnV93LMHW`o8Xy!`i*=l=6>2NH|{nGk5 zNAhV!F^#-I9#BjbRZUV=H zgCJHp&?Lypa;DUFYCvKdUqpo|E?bXhpDaXPKj76@{j?@(0d}5a(jszq949iBBe?LA z|4GJex|+Y>`1CZ@iDHT(?XLM}>MQ-5*_+%q-(KGzd9?qY_xZLDiqD37o-e=Ku~6-; zFu}9*Q`XT^IJ5-M)jy-5r>tW8zFKW?)Xa~o#P9)L4-(p4!5AVOxPR_JXB!JpKaV9x zz!@7qf!E|7DE>#pPgKe75;LGXJ7jQ<(7%6<@w--cs29h_U-R4nE7yY~rF^yuP;`yq zq{hPaIRLN``0Xv{9I;m#-#jV!CL{E_igAmnKs|Zv6X?2GfT&y|gcx*&WZ+}Y71B#> zXT?KDTyASe0Yl z=LIoO&uaI_ZcF^=txPsl^o{{_`hSECZ1om4k>N=mhhKIMY-lB7rprq9c?o&{_xD>O?N3WFk099kHZ%?WuC(3Q_9 zW}?M^7jKiLa1%*hnB$|{eR^w{Qlhfnf|tx0^1_mPYI}4!s~RH6j_b7-9KxAHqjrF} zxC4M1DG$wf?RMy}5A^l3Jf;lzv2TUsbROgXiiy#@c@g7ksIL0Nn0Tn&n z6sTFClKKs2Nh(f90Qg<3?3ExVv&ZfWr0h~(Hx~*nnfmbBl$ytv(%%Vfblj-az{5 z9_bC9SFRh6zUvpDp3Daw&CK?{8T?iqP|P-EWJ0@U)9VLk#O)5C;XD?NQBv$57EuD| z=?_N#0-?a52{`nOMXvxzMqpOE3NLkI383bQ9t9J9%K<%t{PxcZyVh*sONc)cw?4Kb zO!BF44{25(4f!NY5~f@CUoOUeM(aSc{(*3eX%uWyAk%$ZnZ4VInctfiWRp|A$gxA^ zXuY|V@P z@v2`VkVHqzvOHjrzxP33T-YA-{_^*>-jfrL6WUCs-&~&H)s^}Mp>_> z3-Axi;dKzMFx2jsuh+D-f+KEswrzoG+kKZH{N^Tm0!qF-ZkE>!*ezTThmPV~XYF#rrl>s!SMbpXpZ zahVe^etivva+j{yPh2M_UgdS2MV5t3s<(QJM5e;C0rxQA9lc}?H{?4W``jb*>JL&i z^PiaKuKw?4y;PJtsk!hQ?uf2*5df;8X3-V)GFr$1Qk~!jByG>qw)8C@9}jdvx%bq9 zRA9d5IW~Z!f=A-=KzK}s`uf@1H@O%ijg1?mJMqc`4&Og^9})9QPzeU?Ihn;oIp8n< zxY_+-=|R#*;zjw}kXkV)hP3K2ly_0|_y7!>Z8-P&5F=i984mf7&7gLx`M&$ShVKmC#9~H2;a3+*l+DVVamKs3uKMMH~OwArj z|6Zu>v=o~hbBl&UI+dC1b#hcNt|5r>ZVyi9{(I*^tFRwslt?+!lA~4xMNdao@2(Xm zYI&i!v-Uv2#>% zN%qO|4^*BX^jMyvK22EtDCKC)hU0`^`{{#eoYUg{SLM`&uA%Q-uDW@8|GAkVtBdDY z&4ddsW2W?rx)e!{ytoUg<=FRpAFj9G6#I3w^lqCX>)Eb(gYMwXLMG;`D=ZYtK}4(y zWPX&C2E)zGi|QoKFWXL4oc|cS@)MDyM|$NHTo0Cbg^hHYM#NBx1+kAP_jEl@1e(CB znngN?r?9+Cc7@A(hKZlcn{XG{e!SaH%Q?*Wd2A!iwr$9`ZfWY#-RAGsrF`i(d-Nq7 z2HczI6vbotrK&AYquLICd!eAjN##9v{RJIdG=Li;j@nC@{3X9D%2c^DGp$_t>jbnQ;_}~*dUwLMV2ZZfkzgGo! zKl8eg!C=PB{3fUe&>|hTGR``kH(k(I^CxOd?0$6S%z2`;5eSoRYbo)3U1>CVnt;K* zO;@Lc`l$=8Kb0lJ277Qs=|b^awcA^L!6%UPUt4J)Ph)Db)1BKV>@KsP3Fi-`v^Acv z08RQ=kK@h+%PASlTgZ#bH)eEdKkt(nVRHuhX%pj-3w7Lqn5JQewCp2_=Vo_l(FmG_-14 z$dXY<+B=vW&&eJ2T?ov$0cCi_y5K{CbC)nDkgR3{6iAs(hik)$j%T})7!pyLQ*}=f z)zO92Ts&82Vh#tJG*Ki!RTb_yKZ1IW#cqbEh_FYAxt&jj#$`C+1#qCtT#{E}QvJH! z_r(1_ibc_djY)4r(;R<b|n#l z%u?p0irJ1W2qk1pzcb2Q>v7qG%(gRA8NjEnDFNj*!DQWk<}bs~G8PvXAGu0`hz| zzjTKN=p5B~hR8jgpOTAfS@S;`<>7aqrpC{2FDV-#3XOkIFd$DQ=N1RG6VLI(kC@k4 zC4?Tf%M&rt_8wgha(1&HN+Wzt$$vf{W$a=E0h5Cm^I;68t@;aZ(+`J^M9K4QCsVU@ zr)2R(tMc7~^o<7<_ABr-Qu5!NlBJX$=*quQ$ML=S(DgeeWL#OnC&dO!?|bEw|F{=* zb$yvqo>YZr#@@i_WabwMDk2j3y|-D=tR1Rou1}+WE!l@gD0;|(-7zxRk)6(=GTb5# z7)x>ivJ8jW*9VHr)A|bmXK|L`_6hGGsQ|VNE1FLlemzLov~UF#ET!{pC`JtWxADv& zC<49fMkV*qZK?{)*){IBcto+Q^D&!8XVGr^#w1t4w+rp82tFZ|BI4d6BGfa5!3{Ve zfR``GU3cHmV^~#5bc626+S3HP(CQ}x17%&&k>4p=mZ{&t6Vk8P#=&FR`OeYxWP?od(Q6gSE9Pd zu@}yOs_&?KY9He zG&PimHIzMF=;z zKx*sEFtIfoI(FW362~ZB@i@s|DWK|BM{U4YK5nrULi#@ss4qB5sN%@?)&W@AeLv5T~bKrZJB+zmj~E z+BKG^ZZLGT6D_V)pz{hTOuwPZ-~*}GSqH2|YPm3_8sYV^%%AL?UNW;{9%jhY%NGB%5}SH?_+8{}9nf2S)|Z{|^8 zy|xD$Ae-H>KdIlxVt1v9gaYhA5G6^BGF0S3`+p%xyTPnJN?~{V>n1UwelG*CjW?I0 zf81jn0s>sf=7fRV!pSicuk7nn+U+M_1iuw^of~*bC%ljF){4}!2ROKQ>q)cA)99TJ zOZ>`TFusDehyHn4qhYb~f`LIoCZxtWO|Fk6WTD{sC?kN6(S&C9U#TcCzNR{m{B?#COLKWPRzN}QdvUEr>Q&)ez?b+nwtJx z<6}UDa+`Z)E-)aK3a7GRH=CR~w(Q2AUUcezx^DQ`G z>d^dIOhv#Ued58^XM0q}d$M{)ve6j-4{QZmt!CIdx#S--=m&1N@<4AY+Aw)pk)eTN zYW|Gdr-``__TVtk+9^cc2?83$6dN>EcHBbewWmQVGUayaf4ZY=9< zL}%zUdl6-946+T+ugK|~d_00j_wu1g_8%o8BqfbUnAGRH9x(|46t^{KtmLevUmhX=g$C=98Fo&~De~?rwvtvC*efVG&{O|X^=a88?=_}V-hFQ=ErArdj z9d{hFNrzlcIC|e!N;E~}Nhy|ZQo+t*{!|8ExpOdvwO1MFS#;!=Y#Np*^TtJ4^}<`8 z#vT{BC7;U9v1e}mjya~gc7;G3$G_zM)GS*=a5TYW&6bHc>JVY`AitPO0$tIv`4XZ3 zjeSl!azbxA_vAluKr={~F4pahke4W;)xkw+4)443nnFH;n%RoJk^Y>0`H*Q+y=ua3 znLS$^d-iWORR!rX+EK-hb6Lsu@S`s%N*yV+U$U@!kX*4AJXHv;LgT2Sy(OCALctY~ zwG!^9Wg}{duEthGIP(@f9+s{f3vP!-ge?jOsJz|m+58FYY|&SnX@Xbe0WG0TtC4Xk zb!2_MM)nSitc)INkue6>aEttQM%l0lUhXgpI(;pCPYa20aK+W-v*Db1olTM`Jr{ z2V_I?8pl2(kSuQLNGb|}&&PhkH;&N^9Sk{xF}3lIWI%I_`)H9dKN|4QWYWdkcN$?4 zZ8r{QPg^V@n(2a<)2Y#?feBiwQ{)2%%Fp&++1vYwI^hnx$%+IrJXKuc69Hvg!%ug*A@jP=`shRD^I5f)4VSS7q<&+!2bVOLHZqkMYg z{rs_~dPTHOhpl?lxAHzTkBR)it1$OmD6?dJ!#ZVj?-n+Q2QtWjlx(Lqrni>dM~f5= ziVyQY_yKuF2qB^s2wc6Bg=6K$qUA|CWzO+0G0}Ho7jv=k0mPaivWAoK532MdLHVxj3ywJHCS2 zaWPqSq+(1zA6bZ`h-Ki1Bl2$Nd+eKzaDQRyz^?@`g_9Nug*2T_8*Oxt=2N77)*qj8 zpueTL^a!Uvl7M9LZApsNQr)7kS3ke*(X`Bty6=|| zgQR;2(xTo~qAx01y0KO!Gsc)wYHJPflN1+tOPBlBPW&35^r2A_Aq<%H z9C5kqzU#P^9HmQhj5T|u7K4tG0Wfth?0FW{pp^2Zd@GJfWK%p@Z z?TPMFUx!~Sr4A5NX;b&2=nMTuF5tE?6AE2sG7VKJwQXf3qpg8odTQwk2pvA04O&f2!TQIgTdL-u|Gj+l3e1g6^o=ZYL>!W7%)(yw{q;}yVAxag1IFu^ zvz6auR#^xG&E4p^C_a{0A9!FAh~@IIBpo3WzC~qaC0KmVrC`WUF(tpgjxOvMwF84b z$3xoL?Q&A!{*Th$CoMRr_hE?6y z+#ZD~8l&eo%}>8O9;d5jx5pqlWYpsHUoJSHDQw^r}^=){#+(t|xhXw^YKU`kNI5Q91haJOyGjfj% zJ^|LIpTmSQ4@2=CQZbBHPvuQMKitOvIi>TE*j!>@)c{A`XseH?a*r?(ab`)ff z$o6xc!vr06R1z&2dwBh?Gcds}1n{Ff<W1`Znjwc+&5aEk8fPw{v^qM z1cTOqIHNhvwlA8Rb{xlJ{~TUUmnhkyX{( z!m_~%ST{3t{zq1JlH5Ef6ASgIMKk%l0NB#sqj?qwOu|TCp2uj;&+8v0P&)J21uB2@ zjg>`V5}(o1F}=UmKC%{c!}h#}X!=k!ymWb8-ggWZ)DS=%+hSwVj@4*Rplu^54 zT5okZ0X!w>uIyHsnd?*!;>27e#3$HQ9BE6!iQhRa`G!pQl6~duLxkG+*Z0UBhi{;` zVqG3do+*n2Zwa<~Fuya2902NHEu*UbS$whb9y(~HJ_E#C1JP5XHs z_m0uI@+K>W;FKn^=LTP#`I!yLj8k8dXjmv+!6ZkC;~hqu0|98yeTP~41l8N@F7mue z56dse7=KTQiiGQ0YcQ_N)C-!P8v~0%hT-`FSW-=qk1CFPys@hWzXAFP1YzcTsm;cRV!%urjR+-iG=IF#Y%Ppv+)gy&_r2Z1iRYm7AD~OEZA{wt8$rXr*5F`3h zY3eC5pI-2eWPBw4Gjl9{4Kt=Ut0Bui_wIS&XK`6Pg2qEYuW3jXu0DWxpSGQMquqHZ zNEx9J$&^ZO3P2@6jX2HE!>aesWRX=7$5)Q1$?Q+55FdRW#@Yq&n5nZ102;mp#c$5G zL`ji~1ESaTbHQ36D7*+;q<%}5p5&s3Bb2nC5hjG`{!%k ziT75}f5u3TLDKPRqE|K4)#{<>u5bH!P6;`=k~FnR&VZ;h2FxZg00c@hJ6|tiKVI80 z(QBL$oO2xdYEh|URe1tuQlaiS42o2w2<#oHULyK%Ce4L0{g3oxklB1fcYp+5zT4u+ zLe;$2(Hrxhsw#1&|JpYi9Qcajc$oCP{t`VAY6OZ*mRpIS%Rr7+?@Q9Pk(q07;kL3b zfB@btK=qzEU+ME}%lJujW!R-p=S$D*INX64S{k=+GIR%?8CZ;Zf4YJ4_*!tL&!(uo z9+FA*0L@Sh`*h>69UxjV_4hf~IEd1X z!G+{M8dtNVXx?|ohDtH)Af46~ukZHYJkKOwifnlg|}uLo0mxJ(NU!tp0L z#kxC(WTA_)5D)Q={CY%XKv`zFL=?@C4TVUq4kdsOHaOh62}kbFxY$sL2q7TsDYxr3 zd%DsyERQ2}ls{9Z=2Qv1=Iu3@%7QI zY&%0_N$5@wAt_1(^4$l~`JTmB+q~Z2Cm=%$6}Wt`DTy|j8n9%J602j8r|vRK*VAbm zP$PB!Er61x=RY~VebKz8SpiVNp=<5&bpAX)r{A_1k9tFoksGp zS?v$vFPtVjh95_&g%-UtZ3%xbo%Qu@1`~Yp;8`P}w{+j6)_xCY*qQM68ot|Ey1z|O z#z9m`W74x}cg7nx;GB^lY>-%K50^6NrED6%e9WR$6|jUHp#A0zO#&JTmJn4#EOXqy zR-5LfI+O#Hvt3A5?Z-a{q?FPU4iu?LEjA*!4EtA{4+18WJ=A_?$N0^n@kr;7zD4$*sVT^h~| zzct++!w(=^UwjyL2F8(i5B( zJ7Y!sj+A3Aj+Jcx%J2nn1NdSBm_u}wb-qmMlF7)QZ_BDoZEZ4HwR68ghIvKz*I zfT3=<3xKq395<9qk9m=ooJQ7Q>uxPzWSIphfO~Y8M+25g_xNv{wS9OHCS6`u{QIR) zoEYDV&l)j+VmXCK)solez2-fJ0i~$!^T;+01{sY8QfaP`_r^*-bnpy7vhZozd6%0% zWVVXbsqL_ZqTJwE07JDsq|CYWw67VO8O8r=h)5Q5t;>pOZVs#!PjW42oYW(#xo%!- zbFMYkiAf{fx|)B?DGcqN+{4~6y?L1IRV{C{L@lJ+-M38@LLwy6K<LWWu-hRI8I;tt+@tMqV|rraSicLB&+t_L-3U$k^3)8y&x1 z`^&BWm~8;L%Ke|9jfX|mshh@V7MbnXiDxgNK>^awz)j$w^vxT<(@1b|IqQHOfCTLy z7gTq@T-K4ty+AHkK1zB?t@@`JpxIr%GIU5SwIOKxSmi8_pL50l6{XPm0aQCe;$kj5 zUv3#2(vR7=D^go5 zz?295{OnU>^YQvASkfCbu_ESb#eMFe)PgFg3O_NE0T5vEz@!_@g8DnYSmP;r=8Y8u z?yH{9TZ=y*$59fZlU2nBMMG1{n8U#}vxh`| z0JHQ>p0Bh)oqvU{f4?XTD*Q>5x`0Da4*j!%RB1iQ5;THq+(!FDrH;se=SKJ0*|b7q z8YMA25*vEXdweEE(1t)61#$y&om2%qUd#9(v2)X7BdlXVAYsf~mzb%Pa+R0^)rq)w z!O?iWKw-CUMc*_bvN=xZ$CUya+QvXcH-49K9)HfW>gM+geVJjc>c2Mqq!f~^v$AFL@fI!C-pSztX! ziIJcz5jq-o(}B44nwA8#f4|XWC8gGjxP^a=h(AVDY2e7ka(Rzp#}8C;LyV#p8f9R+ zO%gyp;%1TO>bJsae{$HIddanL!|gBnDh&juZqC~Tt^3sN+~*J&{y&GY9PLPctdQT; zv8K)N!_R0HBgDtpT>nW47)!5n#%-y#2&WV}Xk-ki^&=EY3zW~V_0OgYS50O&0K!Ff zhS~k`bjR(d=BNL8H?TrUa)!4gkmby(&{CRN(Q`*j%%K&kpg7-vBr--V2EemNZpr9g zT@Q$IXjP3y8bgK=RE`e7@Fjp|+WB{O&>35WOBKnL~LcX$Dqa&1F@#`258=rBT%#z2pm|zd{i>nmwVncQh}rO zl&Y3T&)PLnFHkjf}fgweM+`mINL`@>?vM zQ)jk=dkB|@0rWhyncc_kAugT}5Rf&WJntd2m!+{VL!mEBimMZhOaJI& zC#l>+L~*gta(r}X?$0iRu}0jLV|@+rKA>ho19>O=^HVO#5Do|-07rX7?#UP!ERPkA zM{13;czEa-qU~VT7EeR~h+q$~`z-`fig@!8s-6G#o1$Xm9=;zFY0doJn2eEnVq55; zerTH%vQLK@gs~8oHnQ_kd+MM*$ZxA!A`ORQ53wg$3So<54$d#b&kT(LlKhyFb3a&65hM*HU%6e!9;{tc_1h-Y4^c} z_@WqIx9D16q}quiNG&lNj%oMF>tOJa#7}o<(X&o698yvEd#7lq0Un6yU~*?=dg6(z z`uZ^hMJrc3RvTEhsGvQ21j1^#^;Qih01iGb87FZ2Q;tgN2jXp%J@{$lputaq6eaf+$j#F+{qfUbZ`b*TE+ z=6ukrNN%E$1tGZ&@Mg01_*O;9G45YkeyiTF_kaP_>5pLlWfQ^p4a2V}frKVv@5soa zoglblCRGTj0+8r=mk<7^l;7soQGmqj!ldjk$5UE>8bLC3FY6?I3 zhCt{LCU@JlY=}*O@dsk;ilj+MA5l-ZHHVP~R(+88J^6EPP}S+v$+p4loln&Rpc#cR zJ-whoY{@GB>m&uj3j?oA#uC^tR2Fe~wz_C_Ky|@!OSA_h)-AA{5}u%GeA=dt7Zy*2 z3j1OZG%OC9n&voRo0il3Ju5hY%<;M zoqKdl$^E$=Y%TPm{_JMBSwuq#ZqWstF)l2<_UcYCwF`~Inb%42!5cMcXo>FNNnuEl zE~LwD9ytdpGDxb(6D}wc#PT~N9VB_TMq@#+P1!O4J=5W2k2zwM7=GeIHu>^*{KcU5 zY-E$P&$sy5&PBYSgzdIBSG2Bicr}X#8z@h+0 z{kKPanOfAnF_>D|!V!|EroK>qxgu{^%C~dFW!yvs-f=t@gS)82E6J0ww)EsQf&FD? zh#3#t*An7~auKXb1GJ@}L3jpo*H}jU5p@niRv<4Ck8ul`wMN+kS0u=NX(I6SZTdh6 zF1QV#;R$kgk$@2vt8(|Y@#g)@{*d{~pClmQQdCxuzqoz>;zQX|$JI_Vb$t6u_Mw={ z70FmlB|Ae>tC4U92}lvL?3pkAfDdNmek?_qmt)6@f_7Wi%7AR#fG`{e^X%(RKyIV~ zu-Z(9`S}5wvDaBw?6m&5;N?(9ST&~NWKGLY;W7i(G&3B}u9=AN`pSWgGRYtJr<9RE z3a7%(OOViR0MsgTQxX_BMe+Rs*xTr5akU_QLEC(nh2_B|EnUtbzoz+Ha^qL)M#M+N zUc`4&t?#t00_gjbTLxK7Ybn&O8I2~q%T|&CZ@SeB&8RivqNWj=$Q{-w?) zq;mtRvr$HrewrTs!+Z~Wgw7(O7h(*wsE`jnR5uZlz*|Y5?^##K5mE}-%QkE;8~!Z! z!t47=u&=;)H~urVxWt3Z0!8v|IRfqP_R^$?milW84wJxbn}}LU5j$Ws$dE z{>(W|@bf<5o_*VS1Ef53eyon%3^0>OQvY@?4`M5HOZ2|@mZfNM%Ska^NT>mpg)zcP z8>+<*BiX7ur{4o7G1fS@tEuw+p)V9W{U$8_9o5TV92rA?sN8_VLPY$irZf5Qz!zZq z9d5IOJm4^%h&eb8&(J3WJuHSnNg#}^6ATd}l{Y_41{!s=dc~v+sZu~CtpV&URS%e| z?a0`;;nv=cO{m{^80H4-v1Qrm0d*;$LM}%_kO9JDGSQBFq7F5=g3$U0%XGqD@6FSB zKvNIHB}1-l=zOUUNcW~jAAl4iaoDBL*cggQV$L@oVP0G~h(Xvd!%%aeK%la;&Im1g z^c=N*&=L!wNV!{jT2<-4Tyh#7Cj3>K2=(W$f^iqmHYQySd?WTjT4hKUZU5fH_qIO0 z78yFWDV~V02$)CW&1|ei^bhYkC`nnj2G&A{qwUJ>o}i<;g&g~om_@Fgqdi9F+&a$l zaT~Mq`?MF!AcS7U0p<88b;7gNOP5eju(hvVK+m8+)>F3v@O&l_L-zw;E`h(&^bSDS z5bJmcw>11jTa+qc!_dJ`oWP$7Lcmx2dc{1~{2;0S7A4<++}#4sZ``_UB6sf3R$s8g z#ss!)Nyj8iE)6Is92!}S5Vlwts>6TPLpV3vDgiK^136fP+CSCv29yEZWVD3^UnH}k zbY=|P$D{H5I-uTi7d4LP7##=3p_|$vP43e~ub=+*%a9le+l2126KZ`W)&|R`-0#H4 zk+RNdKnqBM>}v9`?Ldc1&0v> zw*YQp)6zH4_aOs+z-8)PX5@#wXA6n>uYWHi@?;AV{KJ7ln!Ons<4;9vojJP(wy(0& z$-q825h{h$y0>|z2zv@a-w1)@BoQkEq5Y{E?@e0w_;rG^DnIng83eZ4@>N?WfeETj z#w!cMY37~DNFY%`LC-OHVCOTDL`8^JWG4?d7&6Y7@z)Oyd<;)f!A7I0+$(NO(5@e z*OlfUm&ZFQ)K9we$Vc6gW5siWx>BLSfHLoc?2!HmS%*&{tzh|P zu2L`kkCUf^ni6x?o68?Q8GZ1DW^bh25eyYW;#WO>oi9TaOHgfX9(vt4>JCK6M~4mw zySo4}FE%ZMcJ@ZfxT^2a%hBdAQq8C5LbN2&D>5KWbQ0=74>L@AO25fem;P1k|NGEe zaz*ehfO-!V_&-6~AZdUn$Q9y8vQQ1sn)CqDKXp6z4}PUsqWeUg12+87fwN#LIZLLUU)0eIjrc=nV)A~x=WoVn?czR6>aUN%AuG>tukCwPS@*116{ z50$G82T&86+%Z(=zvp3iW}CG3PD_Tx$8h;x(^NuCiWuJ_NX|qn5opIXn!&dIK>`gF zPQ}Xlc$WcwW^`y1DZ@gJgk+oZ4(-LxJ-HmhEl=%rvXRwm^|5kfJ*4bt5SlVWaDtmE zqERMw=KjTr(>5L8;qHh4K>sB0ucA%1yrr zNxU>t@A;D(i6`b5QLBr^iOPUu*=ji#VH+vuM4iFt8&`+(Uqz^emC)Po{M0t%9^qY0 z`4z#WgAgVyNPHBOyUe?sRoX7jAUbPWCv+x_!iqq?0?GO1Lo^p8(jmc)G~4S=x(>Y= zLwaA*9Pc&UksU`2!b=sbX}N!DWH8R%dMyq8%$H#L9T>*%W!Pn?ARiwFRRU6^#$5)A zV)aPgVw=SZCBx=AS;pr|?m3)i+!GHY1TrMjD(;E{!Kb#UQb@}ykme#`O0#MGY$(5# z&JF52FTkrB@0QdD%)$;Ucu@+k@cc-tWBQ0?pFA@#aI>r-Rt z)1@LN?8Zr_jIQoYs*qgI`PbV4C>1FEWeoxlhF3_VJtv}Lu8)`aaipB;Pk{htg+zc( zDP$!hK0HLmw-8ID7Z>p)BwIiDM57z)CsGr1UYQGUL9zQ>a+{6XktobQJ7_+|CzW*kv zx2IHZ6{^ilh``f>K+*&I=mQuV6G1MfW$(`;{MPqn7G!6e+e0N3%Z#X1%-=j#PPHR}L zV}kd;IvXsCIfRkHaJ=%9_y%f$EqnPMjQM1H*(=w7B+8;I4GM0gWO~h_fJI5~H{aJC za8qZ`dGQe02G?N4V0QlO&I@mOgJ-?KS8+&FedY4u2NDh<(2Up%hpivOp~iZ5R#VyN z^qqNgJm4whM4LOIwN)O*?T%ZZj=verNeWW=jL4tL>pBmP7v{vzs;sR39T5J$JW}5f zLr!N|oPBQLR^5f_v!3Q)LiCaeYU&K?f~rgg{YYv2$k|BqUi}I_qSKVmp>+(Dm%WX2 zfs9hTZ-ma3JAiti(W*l5J*`up58Era@%E{A#9sbw5F!SS#;u9d_*xj z^<^4X660HYhl4o_$R1WlI5i$Mlr)-TS`5%M%c384eH22n;9+ng`VM(41B2?FNt8eS!Zg-5V+lO`Ksa*d zVmzkhOK`meA%d<*^)k!v`cB*Z+r{ujzmX@vbBkYgR2)bPQPxO4DPu4_bt~t8=em6v zy+1=x_4HH_1yV@YO#-aoZ2xm44@(L_iMD4$hyHbJf4?gHG8K$Gi0hyew=_}fuCv3N zVE%Sf(_`s!5P-$+KmO;(t~K;b$v~QNu+(2Ptp6P#@|df!ny($X#YY@(Rv4-5K3m`* z>smg!)5Csbw})Wyv@{u-18G$ky9D?G&vbC@tfl-tCXMgtZ%ry4u`}a9!r_BW^X7H{_V~DJ-cUqa`Mml1DH(a#cwH{+wt*fe%8gh?XAO>( zK$MbRseW92w@+PU!uyR-_))0X1wLcH8uYJJ!{19Ncb0hUtzGee@^oF{zuK_V37hJU-%Y(>FvL;$iD|Ahss2Rmn|3{s^zXlR?zojcl$bxCNxR&fP9}a zir2bav&lTzaF+vuEkSqLgwnWP=-+b)C=CDIV$Tv`ZbX71Yk)|MPT_R9^4|r(U!-}N z{^4rVfc)y}LIY(3xPA{>Df)PJ`8Gt~$#Im^ypbu2g`RgT{^v!U==zSD%RdJYyttJ2 z6t=B2t{Q_CKxPOC zy#D^%9jhd_hM_GU$jscDiixh?V}AR;%SRJI5U&bbMoMSyKX=Vv#^Q}iYAPJ4NBUYf zDHFG$eE)gSD&}h3498RH3bXN3W6o=#Tu6p@yK?ya~^_znN|pe;Q$*KdP6eDJB->!cf^Z?$$`kui1{IGh>J$Nz_6kCL;KK&s>4gYN4edE!;D>m8A5 zg-Pw__^8^hW)ACgAQVST{12vn=h>;ijLiV-Ajz{@e|p9*XV;~FuZ&Hx(^MHCRLw*z?Rl|NCgA75G#qre}2|!UIi89!mQK9ice>aN^ zapLz-oG9+flN&BATDx5B;L)*1SVu*gl}8S}%!%@x`#*N=GzO{n15_vLVg(n{;pV^Y z3iQ}Y{h;9(<_ItN@tbesuT9Ng!?t^g!lK~ zB*WKTK}CdEK_)b@BBdK z`tkPmq>4Q^2Bsu#{%h6#etbR)y0}iWzj-2jug%=Wb9Z)GJKtJws-cdgO*dwpz5iK! z_!^yaa^e$YwsRM|N8*%rc|Y)xz9abI&ja1f6jxq)ey57^=; zOy3d0L2ms`hOZ=CZK_~M(a8$X@b^oW~k}A^$Fe36HPs>MdM>(aM~WaNFerKVoaUCc=9<;VU-y z3q^PNMEHH*nwU$JThBia40j}j1`F>t*gi_sDc8CD@*);>`m9~INVJ@_)8qxZMgP`l zj44KLNS(UtyP~bK?31KWfuu>PWl8goPAy^&lin1Ye9L@a{(P~0e0fB=rZ>vrgH?ZH z=_}o1+V8EhW0u12^eXRh&(V{<(s`wqD@m`@C#KIJcf?B5DTQZi(<$V~=j_pfTHGT#TTXC11)uLd;siwU@(rN%kOCnqGorG3;iO*xmz z_}y%_xTvQyMOJ;XS8{s4gqV4O$5O?$qo2OrU3tdUqFE|2crP_x1QM#DpnV5llMQ%yB4;-oU@l)RRuTsxS)Z`D%eLd&D-dzJ4V&px^IS+J!f=JM?;)tFqZ!B}j@*IJC30 zXSyG}o%Tt)C)TQBE^4;&h$>&t()*ilN<2GUuZTGtd?_Be^fs$XLHv@bV2}Qzr9zhO za0^ANXB4(Im?`(Hc}sW|i+eRy9t?W$c^?2r#Yr?CG9qIZ+5<&(U<8=C@A(=jCq=_>ciJrJ^#5TPnLF|!dWHPSu=O( zZHL?Im`?ZicGH^uZ=Y|7S;q!@^v=+AT273VBsZ%##mt9axGMZ<~X40EmXT|cK zH>W#3b4hT>s_w`Vzy2wkS;n(Z;6tl*$dk7P0^QGNE`C<3I?{fTe{yE}*{{)-yIGJ| z$pOf5)U@>rt1mham!DK|9DmXtZ`qr8Sj9YN{a~+7yTi{%GSglHFT6L`Y?3n9!p%}# ztW`tREsw>NT0hA%PcOA{G;n5&oIRt$eJjUD^sAxvMN{6M(DYAvmg`nmmYAMj8BOji zF#MU^pHgJ-d0x4_b4zRfU{0)OmD}r@oTE!`?Ar6n;(PlGXS2L|5<+#k!(>LMmfGKW zhMUc=O=p#gdgof%SV=`k78GAP+9J?j{n0$vL@asqj?db%rI*0+q#0A*N4V%NPXU<6 zu*z-Gu-BbH*FQaog`KN!Pv_tat*gxI;j8XgkP#d>EZOGcq{Fs zWX$TjpL)%2Vq{thzetFMn;l*M(wp~%QUuUzIIr_B=Yy=>va81vLbbiZvjlpkvzE-- zTxOHlYvP-qc>vxcTBfVwiJ9~-L4q#QjE#VSc`WJCA2a4sOZ%)IJxm7Y&rAZY-e-sgGI0@@B*Cl9M*5TcU=GOB-7&I(|c2G zy72o3d}OI&T${XQu=nt~ewC+m%@>^_)x1ue*io-SX>Y*t%|Hb|tK}}s^}{pG6CHrR z)&|VGzK?|)WD6}F4p<843HwYf*Xd2heNCAWIS%i=+1rhr`9oveqg5wm+?U z+@Q>L=E#2CmPv+bFLecORIU6kTiK8uWVj;_CBP*T?x6<4(0_ zZgGyj`d6vbgTLmr@4fBUyYX=5c=rH7MrreEUq Date: Thu, 3 Nov 2022 17:42:40 +0100 Subject: [PATCH 058/292] fix a few typos in tools directory --- tools/cli/commands-cordova.js | 2 +- tools/cli/commands-packages-query.js | 2 +- tools/cli/commands-packages.js | 4 ++-- tools/cli/default-npm-deps.js | 2 +- tools/cli/help.txt | 4 ++-- tools/console/console.js | 4 ++-- tools/cordova/builder.js | 8 ++++---- tools/fs/files.ts | 4 ++-- tools/fs/watch.ts | 6 +++--- tools/isobuild/builder.js | 2 +- tools/isobuild/bundler.js | 12 ++++++------ tools/isobuild/compiler.js | 2 +- tools/isobuild/js-analyze.js | 2 +- tools/isobuild/package-source.js | 4 ++-- tools/isobuild/resolver.ts | 2 +- tools/meteor-services/deploy.js | 2 +- tools/meteor-services/service-connection.js | 2 +- tools/packaging/warehouse.js | 2 +- tools/runners/run-mongo.js | 2 +- tools/tests/cordova-plugins.js | 2 +- tools/tool-testing/galaxy-utils.js | 6 +++--- tools/tool-testing/sandbox.js | 4 ++-- tools/utils/buildmessage.js | 2 +- tools/utils/parse-stack.ts | 2 +- 24 files changed, 42 insertions(+), 42 deletions(-) diff --git a/tools/cli/commands-cordova.js b/tools/cli/commands-cordova.js index cc3f570e46..30a449ea46 100644 --- a/tools/cli/commands-cordova.js +++ b/tools/cli/commands-cordova.js @@ -57,7 +57,7 @@ function doAddPlatform(options) { return; } - // Only write the new platform list when we have succesfully synchronized + // Only write the new platform list when we have successfully synchronized. projectContext.platformList.write(installedPlatforms); for (var platform of platformsToAdd) { diff --git a/tools/cli/commands-packages-query.js b/tools/cli/commands-packages-query.js index aea3fe0e59..08597650f1 100644 --- a/tools/cli/commands-packages-query.js +++ b/tools/cli/commands-packages-query.js @@ -278,7 +278,7 @@ var PkgImplies = function (pkgDeps) { var archName = (r.arch === "os") ? "server" : r.arch; architectures.push(archName); }); - // Sort architecures alphabetically. + // Sort architectures alphabetically. architectures.sort(); if (! _.isEmpty(architectures)) { self.data.push({ name: name, architectures: architectures }); diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 001bfa9a8c..2c8f3ff4e2 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -1243,7 +1243,7 @@ main.registerCommand({ if (showJson) { if (expandedAlready) { // on expanded packages we only want to add minimal information to - // keep the json file compact, so we make the value a stirng + // keep the json file compact, so we make the value a string if (topLevelSet.has(packageName)) { parent[packageName] = `${packageToPrint.version}-${suffixes.topLevel}` } else { @@ -2425,7 +2425,7 @@ main.registerCommand({ // Log that we removed the constraints. It is possible that there are // constraints that we officially removed that the project still 'depends' on, - // which is why we do this in addition to dislpaying the PackageMapDelta. + // which is why we do this in addition to displaying the PackageMapDelta. _.each(packagesToRemove, function (packageName) { Console.info(packageName + ": removed dependency"); }); diff --git a/tools/cli/default-npm-deps.js b/tools/cli/default-npm-deps.js index d34c1a702e..28dfe2e0f3 100644 --- a/tools/cli/default-npm-deps.js +++ b/tools/cli/default-npm-deps.js @@ -16,7 +16,7 @@ export function install(appDir, options) { // NOTE we need skel-minimal to pull in jQuery which right now is required for Blaze const { dependencies } = require("../static-assets/skel-blaze/package.json"); - // Write a minimial package.json with the same dependencies as the + // Write a minimal package.json with the same dependencies as the // default new-app package.json file. writeFile( packageJsonPath, diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 13c612e9fd..8091e7b025 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -209,10 +209,10 @@ conflicts with other packages in the app. Passing the --patch argument will update to the latest patch, if such exists. Patch releases contain very minor changes, usually bug fixes. Updating to the latest patch is always recommended. This will try to not update non-core -packages unless strictly nessessary. +packages unless strictly necessary. Passing the --release argument will force update to a specific release of -meteor. This will not update non-core packages unless strictly nessessary. It +meteor. This will not update non-core packages unless strictly necessary. It is also possible that some packages cannot be updated to be compatible with the new release. If that happens, the app will not build until dependencies on those packages are removed. diff --git a/tools/console/console.js b/tools/console/console.js index 9cad2b5cc1..16ebd55da9 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -13,7 +13,7 @@ /// /// Sometimes, there is a phrase that shouldn't be split up over multiple /// lines (for example, 'meteor update'). When applicable, please use the -/// following functions (Some of them add aditional formatting, especially when +/// following functions (Some of them add additional formatting, especially when /// pretty-print is turned on): /// /// - Console.command: things to enter on the command-line, such as @@ -714,7 +714,7 @@ class Console extends ConsoleBase { // Passing in both options will offset the bulletPoint by the indentation, // like so: // " this message is indented by two." - // " => this mesage indented by two and + // " => this message indented by two and // and also starts with an arrow." // options(o) { diff --git a/tools/cordova/builder.js b/tools/cordova/builder.js index 06fa87760b..3c35e42dbb 100644 --- a/tools/cordova/builder.js +++ b/tools/cordova/builder.js @@ -133,9 +133,9 @@ export class CordovaBuilder { ios: {}, android: { "AndroidXEnabled": true, - // we still use a port based on appId on iOS to avoid conflits on local webserver - // we dont need it on android, but the contentUrl can only be one, and we set this - // here to be able to intercept these calls + // We still use a port based on appId on iOS to avoid conflits on local webserver. + // We don't need it on android, but the contentUrl can only be one, and we set this + // here to be able to intercept these calls. "hostname": `localhost:${cordovaServerPort}`, "AndroidInsecureFileModeEnabled": true } @@ -867,7 +867,7 @@ configuration. The key may be deprecated.`); * [Cordova documentation](http://cordova.apache.org/docs/en/7.x/config_ref/index.html#resource-file). * @param {String} src The project resource path. * @param {String} target Resource destination in build. - * @param {String} [platform] Optional. A platform name (either `ios` or `android`, both if ommited) to add a resource-file entry. + * @param {String} [platform] Optional. A platform name (either `ios` or `android`, both if omitted) to add a resource-file entry. * @memberOf App */ addResourceFile: function (src, target, platform) { diff --git a/tools/fs/files.ts b/tools/fs/files.ts index 432b210def..0229231c23 100644 --- a/tools/fs/files.ts +++ b/tools/fs/files.ts @@ -993,7 +993,7 @@ Profile("files.writeFileAtomically", function (filename: string, contents: strin rename(tmpFile, filename); }); -// Like fs.symlinkSync, but creates a temporay link and renames it over the +// Like fs.symlinkSync, but creates a temporary link and renames it over the // file; this means it works even if the file already exists. // Do not use this function on Windows, it won't work. export function symlinkOverSync(linkText: string, file: string) { @@ -1018,7 +1018,7 @@ export function symlinkOverSync(linkText: string, file: string) { // files.FancySyntaxError, from which you may read 'message', 'file', // 'line', and 'column' attributes ... v8 is normally reluctant to // reveal this information but will write it to stderr if you pass it -// an undocumented flag. Unforunately though node doesn't have dup2 so +// an undocumented flag. Unfortunately though node doesn't have dup2 so // we can't intercept the write. So instead we use a completely // different parser with a better error handling API. Ah well. The // underlying V8 issue is: diff --git a/tools/fs/watch.ts b/tools/fs/watch.ts index 4d87f26d69..5607349d73 100644 --- a/tools/fs/watch.ts +++ b/tools/fs/watch.ts @@ -726,9 +726,9 @@ export class Watcher { return stat; } - // Iterates over the array, calling handleItem for each item - // When this._async is true, it pauses ocassionally to avoid blocking for too long - // Stops iterating after watcher is stopped + // Iterates over the array, calling handleItem for each item. + // When this._async is true, it pauses occasionally to avoid blocking for too long. + // Stops iterating after watcher is stopped. private processBatches( array: T[], handleItem: (item: T) => any, diff --git a/tools/isobuild/builder.js b/tools/isobuild/builder.js index 5e4e736915..a8cc62f0cd 100644 --- a/tools/isobuild/builder.js +++ b/tools/isobuild/builder.js @@ -63,7 +63,7 @@ export default class Builder { outputPath, previousBuilder, // Even though in-place builds are disabled by default on some - // platforms (Windows), they can be forcibly reenabled with this + // platforms (Windows), they can be forcibly re-enabled with this // option, in cases where it's safe and/or necessary to avoid // clobbering existing files. forceInPlaceBuild = false, diff --git a/tools/isobuild/bundler.js b/tools/isobuild/bundler.js index 1f36259ba8..19da6c4827 100644 --- a/tools/isobuild/bundler.js +++ b/tools/isobuild/bundler.js @@ -474,7 +474,7 @@ class NodeModulesDirectory { if (start >= parts.length) { // If "node_modules" is the final part, then there's nothing - // futher to examine, yet. + // further to examine, yet. return true; } @@ -833,7 +833,7 @@ class Target { // Top-level entry point for building a target. Generally to build a // target, you create with 'new', call make() to specify its sources - // and build options and actually do the work of buliding the + // and build options and actually do the work of building the // target, and finally you retrieve the build product with a // target-type-dependent function such as write() or toJsImage(). // @@ -1040,7 +1040,7 @@ class Target { buildmessage.error( "circular dependency between packages " + unibuild.pkg.name + " and " + usedUnibuild.pkg.name); - // recover by not enforcing one of the depedencies + // recover by not enforcing one of the dependencies return; } onStack[usedUnibuild.id] = true; @@ -2855,7 +2855,7 @@ var writeFile = Profile("bundler writeFile", function (file, builder, options) { // return the provided buffer without modification. function removeSourceMappingURLs(data) { if (Buffer.isBuffer(data)) { - // Unfortuantely there is no way to search a Buffer using a RegExp, so + // Unfortunately there is no way to search a Buffer using a RegExp, so // there's a chance of false positives here, which could lead to // unnecessarily stringifying and re-Buffer.from-ing the data, though // that should not cause any logical problems. @@ -3088,7 +3088,7 @@ Find out more about Meteor at meteor.com. builder.complete(); // Now, go and "fix up" the outputPath properties of the sub-builders. - // Since the sub-builders originally were targetted at a temporary + // Since the sub-builders originally were targeted at a temporary // buildPath of the main builder, their outputPath properties need to // be adjusted so we can later pass them as previousBuilder's Object.keys(builders).forEach(name => { @@ -3392,7 +3392,7 @@ function bundle({ // Tell the webapp package to pause responding to requests from // clients that use this arch, because we're about to write a // new version of this bundle to disk. If the message fails - // becuase the child process exited, proceed with writing the + // because the child process exited, proceed with writing the // target anyway. await pauseClient(arch).catch(ignoreHarmlessErrors); diff --git a/tools/isobuild/compiler.js b/tools/isobuild/compiler.js index 729a2fb358..d9793d8037 100644 --- a/tools/isobuild/compiler.js +++ b/tools/isobuild/compiler.js @@ -516,7 +516,7 @@ var compileUnibuild = Profile(function (options) { // addAssets or putting it in the public/private directories in an app. // // This is a backwards-incompatible change, but it doesn't affect - // previously-published packages (because the check is occuring in the + // previously-published packages (because the check is occurring in the // compiler), and it doesn't affect apps (where random files outside of // private/public never end up in the source list anyway). // diff --git a/tools/isobuild/js-analyze.js b/tools/isobuild/js-analyze.js index 1b8abee398..834f8ea809 100644 --- a/tools/isobuild/js-analyze.js +++ b/tools/isobuild/js-analyze.js @@ -297,7 +297,7 @@ export function findAssignedGlobals(source, hash) { programScope.implicit.left.forEach(entry => { if (entry.identifier && entry.identifier.type === "Identifier" && - // Only consider identifers that are assigned a value. + // Only consider identifiers that are assigned a value. entry.writeExpr) { assignedGlobals[entry.identifier.name] = true; } diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index 77f66c79f5..69279202b6 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -506,7 +506,7 @@ Object.assign(PackageSource.prototype, { var initFromPackageDirOptions = options; // If we know what package we are initializing, we pass in a - // name. Otherwise, we are intializing the base package specified by 'name:' + // name. Otherwise, we are initializing the base package specified by 'name:' // field in Package.Describe. In that case, it is clearly not a test // package. (Though we could be initializing a specific package without it // being a test, for a variety of reasons). @@ -1419,7 +1419,7 @@ Object.assign(PackageSource.prototype, { // subdirectories, so that we know whether we need to descend // further. If sources is still empty after we handle everything // else in dir, then nothing in this node_modules subdir can be - // imported by anthing outside of it, so we can ignore it. + // imported by anything outside of it, so we can ignore it. nodeModulesDir = subdir; // A "local" node_modules directory is one that's managed by the diff --git a/tools/isobuild/resolver.ts b/tools/isobuild/resolver.ts index 0261f90908..12f2477ec6 100644 --- a/tools/isobuild/resolver.ts +++ b/tools/isobuild/resolver.ts @@ -127,7 +127,7 @@ export default class Resolver { // Resolve the given module identifier to an object { path, stat } or // null, relative to an absolute parent path. The _seenDirPaths - // parameter is for internal use only and should be ommitted. + // parameter is for internal use only and should be omitted. public resolve( id: string, absParentPath: string, diff --git a/tools/meteor-services/deploy.js b/tools/meteor-services/deploy.js index 84203ea283..104c7f9427 100644 --- a/tools/meteor-services/deploy.js +++ b/tools/meteor-services/deploy.js @@ -488,7 +488,7 @@ export async function bundleAndDeploy(options) { let preflightPassword = null; if (options.isBuildOnly) { - Console.info('Skipping pre authentication as the option --build-only was provded.'); + Console.info('Skipping pre authentication as the option --build-only was provided.'); } else { site = options.site && canonicalizeSite(options.site) if (! site) { diff --git a/tools/meteor-services/service-connection.js b/tools/meteor-services/service-connection.js index 6ac6791fd8..6fe7cd0096 100644 --- a/tools/meteor-services/service-connection.js +++ b/tools/meteor-services/service-connection.js @@ -69,7 +69,7 @@ var ServiceConnection = function (endpointUrl, options) { self.connection._stream.on('disconnect', function (error) { self.connected = false; if (error && error.errorType === "DDP.ForcedReconnectError") { - // OK, we requested this, probably due to version negotation failure. + // OK, we requested this, probably due to version negotiation failure. // // This ought to have happened before we successfully connect, unless // somebody adds other calls to forced reconnect to Meteor... diff --git a/tools/packaging/warehouse.js b/tools/packaging/warehouse.js index e4142eeaa9..a8e42166e2 100644 --- a/tools/packaging/warehouse.js +++ b/tools/packaging/warehouse.js @@ -6,7 +6,7 @@ // // Because of this, we do have to be careful that the files used by this code // and the files used by tropohouse.js (the modern version of the warehouse) -// don't overlap. tropohouse does not use tools or releases directorys, and +// don't overlap. tropohouse does not use tools or releases directories, and // while they both have packages directories with similar structures, the // version names should not overlap: warehouse versions are SHAs and tropohouse // versions are semvers. Additionally, while they do both use the 'meteor' diff --git a/tools/runners/run-mongo.js b/tools/runners/run-mongo.js index c1e2450e1b..80f6d103cd 100644 --- a/tools/runners/run-mongo.js +++ b/tools/runners/run-mongo.js @@ -8,7 +8,7 @@ var _ = require('underscore'); import { loadIsopackage } from '../tool-env/isopackets.js'; var Console = require('../console/console.js').Console; -// Given a Mongo URL, open an interative Mongo shell on this terminal +// Given a Mongo URL, open an interactive Mongo shell on this terminal // on that database. var runMongoShell = function(url) { var mongoPath = files.pathJoin( diff --git a/tools/tests/cordova-plugins.js b/tools/tests/cordova-plugins.js index 27de381990..85a9212eac 100644 --- a/tools/tests/cordova-plugins.js +++ b/tools/tests/cordova-plugins.js @@ -264,7 +264,7 @@ selftest.define("add cordova plugins", ["slow", "cordova"], function () { checkUserPlugins(s, ["com.example.plugin"]); - // This should fail beacuse the plugin does not exists at the specified path + // This should fail because the plugin does not exists at the specified path. run = s.run("build", '../a', "--server", "localhost:3000"); run.waitSecs(30); run.expectExit(1); diff --git a/tools/tool-testing/galaxy-utils.js b/tools/tool-testing/galaxy-utils.js index 14dfc71714..0731bdd6fc 100644 --- a/tools/tool-testing/galaxy-utils.js +++ b/tools/tool-testing/galaxy-utils.js @@ -44,8 +44,8 @@ exports.sanityCheck = selftest.markStack(function () { // Login to Galaxy with environment-variable credentials passed in by the user. // -// Unlike the normal `meteor deploy` Galaxy is not yet publically available, so -// we don't want to use the publically-accessible test account here. +// Unlike the normal `meteor deploy` Galaxy is not yet publicly available, so +// we don't want to use the publicly-accessible test account here. exports.loginToGalaxy = selftest.markStack(function (sandbox) { var user = GALAXY_USERNAME; var pass = GALAXY_PASSWORD; @@ -99,7 +99,7 @@ exports.createAndDeployApp = selftest.markStack(function (sandbox, options) { var settings = options.settings; var appName = options.appName || testUtils.randomAppName(); - // The simple app contains standart app packages and some small bits of code + // The simple app contains standard app packages and some small bits of code // so that we can check that it is being served correctly. Let's use that as // our default. var templateApp = options.templateApp || 'simple-app'; diff --git a/tools/tool-testing/sandbox.js b/tools/tool-testing/sandbox.js index 765db2d2e4..37d7bbc9d4 100644 --- a/tools/tool-testing/sandbox.js +++ b/tools/tool-testing/sandbox.js @@ -283,7 +283,7 @@ export default class Sandbox { } // Write to a file in the sandbox, overwriting its current contents - // if any. 'filename' is a path intepreted relative to the Sandbox's + // if any. 'filename' is a path interpreted relative to the Sandbox's // cwd. 'contents' is a string (utf8 is assumed). write(filename, contents) { files.writeFile(files.pathJoin(this.cwd, filename), contents, 'utf8'); @@ -295,7 +295,7 @@ export default class Sandbox { } // Reads a file in the sandbox as a utf8 string. 'filename' is a - // path intepreted relative to the Sandbox's cwd. Returns null if + // path interpreted relative to the Sandbox's cwd. Returns null if // file does not exist. read(filename) { const file = files.pathJoin(this.cwd, filename); diff --git a/tools/utils/buildmessage.js b/tools/utils/buildmessage.js index 703263ed82..0d468624c1 100644 --- a/tools/utils/buildmessage.js +++ b/tools/utils/buildmessage.js @@ -7,7 +7,7 @@ var Progress = require('../console/progress').Progress; var debugBuild = !!process.env.METEOR_DEBUG_BUILD; // A job is something like "building package foo". It contains the set -// of messages generated by tha job. A given build run could contain +// of messages generated by the job. A given build run could contain // several jobs. Each job has an (absolute) path associated with // it. Filenames in messages within a job are to be interpreted // relative to that path. diff --git a/tools/utils/parse-stack.ts b/tools/utils/parse-stack.ts index 9a4a970ef6..e513ea1004 100644 --- a/tools/utils/parse-stack.ts +++ b/tools/utils/parse-stack.ts @@ -25,7 +25,7 @@ type ParsedStackFrame = { * More recently called functions appear first. * * Accomplishes this by parsing the text representation of the stack - * with regular expressions. Unlikey to work anywhere but v8. + * with regular expressions. Unlikely to work anywhere but v8. * * If a function on the stack has been marked with mark(), will not * return anything past that function. We call this the "user portion" From 5cca61090c1dffd8e905fc911995595b3a58c413 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:55:40 -0300 Subject: [PATCH 059/292] feat: cli command --- tools/cli/commands.js | 106 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..c78c915f18 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2508,6 +2508,112 @@ main.registerCommand({ }); +/////////////////////////////////////////////////////////////////////////////// +// generate +/////////////////////////////////////////////////////////////////////////////// + + +// Examples of generate: +// meteor generate --collection posts -> api/posts/collection.js => Posts +// meteor generate --methods posts -> api/posts/methods.js => Posts +// meteor generate posts ^^ same as above + +main.registerCommand({ + name: 'generate', + maxArgs: 1, + minArgs: 1, + options: { + path: { type: String }, + }, + pretty: false, + catalogRefresh: new catalog.Refresh.Never() +}, function (options) { + const { args, appDir } = options; + /** + * @type{string} + */ + const scaffoldName = args[0]; + + // get directory where we will place our files + const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; + + if (scaffoldName.includes('-')) throw new main.ShowUsage; + + if (scaffoldName.includes('/')) throw new main.ShowUsage; + + const allNonWordRegex = /\W/g; + if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; + + const getFilesInDir = (appDir) => { + const appPath = files.pathResolve(appDir); + return files.readdirNoDots(appPath); + } + + const getExtension = () => { + const rootFiles = getFilesInDir(appDir); + if (rootFiles.includes('tsconfig.json')) return 'ts' + else return 'js' + } + + /** + * @param str{string} + * @returns {string} + */ + const toPascalCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); + + + /** + * + * @param name {string} + */ + const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$UpperName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$UpperName$$') return toPascalCase(scaffoldName); + }) + } + + + /// Program + + const extension = getExtension() + const assetsPath = () => { + return files.pathJoin( + __dirnameConverted, + '..', + 'static-assets', + `scaffolds-${ extension }`) + } + // create directory + const isOk = files.mkdir_p(scaffoldPath); + // Remember to write that code 2 means that something went wrong on creating the folder + if (!isOk) return 2; + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { + transformFilename: function (f) { + return transformName(f); + }, + transformContents: function (contents, file) { + return transformName(contents.toString()); + } + }) + // TODO: add to imports to main.js + // before get meteor.mainModule.server string from package.json + // get from package.json + + const mainJsPath = files.pathJoin(appDir, 'server', 'main.js'); + const mainJs = files.readFile(mainJsPath); + const mainJsLines = mainJs.toString().split('\n'); + const importLine = options.path + ? `import ${options.path}/${scaffoldName}';` + : `import '/imports/api/${ scaffoldName }';` + const mainJsFile = [importLine, ...mainJsLines].join('\n'); + files.writeFile(mainJsPath, mainJsFile); + + + return 0; +}); + + /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// From 89a5cf2d9066831b41b66bcc71f5c82fac40d104 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:05 -0300 Subject: [PATCH 060/292] feat: cli collection.js --- tools/static-assets/scaffolds-js/collection.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/collection.js diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js new file mode 100644 index 0000000000..88592bbe98 --- /dev/null +++ b/tools/static-assets/scaffolds-js/collection.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); From cfe20a240a7a042127dfb6b76336af75f7e60c89 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:13 -0300 Subject: [PATCH 061/292] feat: cli index.js --- tools/static-assets/scaffolds-js/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/index.js diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js new file mode 100644 index 0000000000..032d84717e --- /dev/null +++ b/tools/static-assets/scaffolds-js/index.js @@ -0,0 +1,15 @@ +import { $$UpperName$$Collection } from './collection'; +import { + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} from './methods'; + +export { + $$UpperName$$Collection, + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} From 2f4132d2278957f5645925e5b404b5b918cd31be Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:24 -0300 Subject: [PATCH 062/292] feat: cli methods.js --- tools/static-assets/scaffolds-js/methods.js | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/methods.js diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js new file mode 100644 index 0000000000..9ad38e68ab --- /dev/null +++ b/tools/static-assets/scaffolds-js/methods.js @@ -0,0 +1,25 @@ +import { Meteor } from 'meteor/meteor' +import { $$UpperName$$Collection } from './collection'; + +export const save$$UpperName$$ = async (data) => { + return await $$UpperName$$Collection.insertAsync({ ...data }); +} + +export const update$$UpperName$$ = async (_id, data) => { + return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +} + +export const remove$$UpperName$$ = async (_id) => { + return await $$UpperName$$Collection.removeAsync(_id); +} + +export const find$$UpperName$$ById = async (_id) => { + return await $$UpperName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +}); From f2750750ff1cd09764a3297996cd33110c7ac62f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:31 -0300 Subject: [PATCH 063/292] feat: cli collection.ts --- tools/static-assets/scaffolds-ts/collection.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/collection.ts diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts new file mode 100644 index 0000000000..9ca4839cf5 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -0,0 +1,9 @@ +import { Mongo } from 'meteor/mongo'; + +export type $$UpperName$$ = { + _id?: string; + name: string; + createdAt: Date; +} + +export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); From f9f82f1c2deb01c12a9cfb45cfe0ce1dd0622127 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:40 -0300 Subject: [PATCH 064/292] feat: cli index.ts --- tools/static-assets/scaffolds-ts/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/index.ts diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts new file mode 100644 index 0000000000..5538203e55 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -0,0 +1,15 @@ +import { $$UpperName$$Collection } from './collection'; +import { + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} from './methods'; + +export { +$$UpperName$$Collection, + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +} From 9d7933628257617554c8f9fbc0b76504083f6fe4 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 3 Nov 2022 18:56:48 -0300 Subject: [PATCH 065/292] feat: cli index.ts --- tools/static-assets/scaffolds-ts/methods.ts | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/methods.ts diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts new file mode 100644 index 0000000000..18ab0a171b --- /dev/null +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -0,0 +1,25 @@ +import { Meteor } from 'meteor/meteor' +import { $$UpperName$$ , $$UpperName$$Collection } from './collection'; + +export const save$$UpperName$$ = async (data: $$UpperName$$) => { + return await $$UpperName$$Collection.insertAsync({ ...data }); +} + +export const update$$UpperName$$ = async (_id: string, data: Partial<$$UpperName$$>) => { + return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +} + +export const remove$$UpperName$$ = async (_id: string) => { + return await $$UpperName$$Collection.removeAsync(_id); +} + +export const find$$UpperName$$ById = async (_id: string) => { + return await $$UpperName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + save$$UpperName$$, + update$$UpperName$$, + remove$$UpperName$$, + find$$UpperName$$ById +}); From 843e4e1ca23476e17abfb9efa60735c7ab5814e0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Fri, 4 Nov 2022 09:34:35 -0300 Subject: [PATCH 066/292] Update packages/accounts-base/package-types.json --- packages/accounts-base/package-types.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/package-types.json b/packages/accounts-base/package-types.json index e948b74664..033f6cab29 100644 --- a/packages/accounts-base/package-types.json +++ b/packages/accounts-base/package-types.json @@ -1,3 +1,3 @@ { - "typesEntry": "__types/accounts-base.d.ts" + "typesEntry": "accounts-base.d.ts" } From c68af6205fc8ef54585e5003a238d9faf18ee51e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 10:20:50 -0300 Subject: [PATCH 067/292] chore: updated the auto updater --- scripts/admin/update-semver/index.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/admin/update-semver/index.js b/scripts/admin/update-semver/index.js index 3024508bb1..5ecd9c2e2e 100644 --- a/scripts/admin/update-semver/index.js +++ b/scripts/admin/update-semver/index.js @@ -60,6 +60,10 @@ async function main() { // ddp-common const p = await getPackages(); + console.log('****************') + console.log('Will be updating the following packages:'); + console.dir(p) + console.log('****************') const packages = p.concat(`packages/meteor-tool.${ type }`); args = packages .split('/') @@ -88,8 +92,12 @@ async function main() { // version: '1.2.3' <--- this is the line we want, we assure that it has a version in the previous if //}); const [_, versionValue] = line.split(':'); - const currentVersion = versionValue.trim().replace(',', ''); - const semverVersion = semver.coerce(currentVersion); + const currentVersion = versionValue + .trim() + .replace(',', '') + .replace(/'/g, '') + .replace(/"/g, ''); + /** * @@ -98,9 +106,9 @@ async function main() { */ function incrementNewVersion(release) { if (release.includes('beta') || release.includes('rc')) { - return semver.inc(semverVersion, 'prerelease', release); + return semver.inc(currentVersion, 'prerelease', release); } - return semver.inc(semverVersion, release); + return semver.inc(currentVersion, release); } const newVersion = incrementNewVersion(release); From dbfa7abf82463425f84cf926de2e2161ca83a391 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 10:40:35 -0300 Subject: [PATCH 068/292] chore: added @all for updater --- scripts/admin/update-semver/index.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/admin/update-semver/index.js b/scripts/admin/update-semver/index.js index 5ecd9c2e2e..73c4a0fce8 100644 --- a/scripts/admin/update-semver/index.js +++ b/scripts/admin/update-semver/index.js @@ -7,6 +7,7 @@ const semver = require('semver'); const fs = require('fs'); const { exec } = require("child_process"); +const { readdir } = require("fs/promises"); const runCommand = async (command) => { return new Promise((resolve, reject) => { @@ -45,12 +46,23 @@ async function getFile(path) { } +const getDirectories = async source => + (await readdir(source, { withFileTypes: true })) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); + async function main() { /** * @type {string[]} */ let args = process.argv.slice(2); + if (args[0].startsWith('@all')) { + const [_, type] = args[0].split('.'); + const allPackages = await getDirectories('../../../packages'); + args = allPackages.map((packageName) => `${ packageName }.${ type }`); + } + if (args[0].startsWith('@auto')) { const [_, type] = args[0].split('.'); // List of packages that for some reason are not in the diff. @@ -92,6 +104,7 @@ async function main() { // version: '1.2.3' <--- this is the line we want, we assure that it has a version in the previous if //}); const [_, versionValue] = line.split(':'); + if (!versionValue) continue; const currentVersion = versionValue .trim() .replace(',', '') @@ -113,7 +126,7 @@ async function main() { const newVersion = incrementNewVersion(release); console.log(`Updating ${ name } from ${ currentVersion } to ${ newVersion }`); - const newCode = code.replace(currentVersion, "'" + newVersion + "'"); + const newCode = code.replace(currentVersion, `${ newVersion }`); await fs.promises.writeFile(filePath, newCode); } } From ab4350e3a68446f39e3d25c739a4c56a8381e8b8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 10:41:32 -0300 Subject: [PATCH 069/292] Meteor version to 2.8.1-beta.1 :comet: --- packages/accounts-base/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/modules-runtime-hot/package.js | 2 +- packages/modules-runtime/package.js | 2 +- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index a411dcddbb..20045b5258 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.4', + version: '2.2.5-beta.0', }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 68565fa34c..e5c8ded7c7 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1-beta.0', + version: '2.8.1-beta.1', }); Package.includeTool(); diff --git a/packages/modules-runtime-hot/package.js b/packages/modules-runtime-hot/package.js index 4d303badb3..e06c2b1892 100644 --- a/packages/modules-runtime-hot/package.js +++ b/packages/modules-runtime-hot/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modules-runtime-hot', - version: '0.14.1-beta.0', + version: '0.14.1-beta.1', summary: 'Patches modules-runtime to support Hot Module Replacement', git: 'https://github.com/benjamn/install', documentation: 'README.md', diff --git a/packages/modules-runtime/package.js b/packages/modules-runtime/package.js index 66b80c028e..8253f2ecdd 100644 --- a/packages/modules-runtime/package.js +++ b/packages/modules-runtime/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules-runtime", - version: '0.13.2-beta.0', + version: '0.13.2-beta.1', summary: "CommonJS module system", git: "https://github.com/benjamn/install", documentation: "README.md" diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 0b37e4ac1b..b5a848fd14 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1-beta.0' + version: '1.16.1-beta.1' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 2295f3302d..d60ac53c6c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-beta.0", + "version": "2.8.1-beta.1", "recommended": false, "official": false, "description": "Meteor experimental release" From 995546f58e94e8c88d9bc335297263ce8b4e534b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 10:46:46 -0300 Subject: [PATCH 070/292] Meteor version to 2.8.1-beta.1 :comet: --- packages/accounts-base/package.js | 2 +- packages/browser-policy-common/package.js | 2 +- packages/browser-policy-framing/package.js | 2 +- packages/browser-policy/package.js | 2 +- packages/check/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ddp-rate-limiter/package.js | 2 +- packages/ddp/package.js | 2 +- packages/diff-sequence/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/ejson/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/facts-ui/package.js | 2 +- packages/fetch/package.js | 2 +- packages/geojson-utils/package.js | 2 +- packages/hot-module-replacement/package.js | 2 +- packages/meteor/package.js | 2 +- packages/modern-browsers/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-dict/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/server-render/package.js | 2 +- packages/service-configuration/package.js | 2 +- packages/session/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tracker/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/underscore/package.js | 2 +- packages/webapp-hashing/package.js | 2 +- packages/webapp/package.js | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 20045b5258..3627de74eb 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5-beta.0', + version: '2.2.5-beta.1', }); Package.onUse(api => { diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 34748b2c22..14a26977dc 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for browser-policy packages", - version: "1.0.11" + version: "1.0.11-beta.1" }); Package.onUse(function (api) { diff --git a/packages/browser-policy-framing/package.js b/packages/browser-policy-framing/package.js index 06ebdfe2e6..22f88cec8a 100644 --- a/packages/browser-policy-framing/package.js +++ b/packages/browser-policy-framing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Restrict which websites can frame your app", - version: '1.1.1-beta.0' + version: '1.1.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/browser-policy/package.js b/packages/browser-policy/package.js index aa3ab9dd80..81ebcdb92c 100644 --- a/packages/browser-policy/package.js +++ b/packages/browser-policy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure security policies enforced by the browser", - version: '1.1.1-beta.0' + version: '1.1.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/check/package.js b/packages/check/package.js index 084004fee8..930480fcbb 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.1', + version: '1.3.1-beta.1', }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 7b9eef3eb6..6bd131ffd3 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.1-beta.0', + version: '2.6.1-beta.1', documentation: null }); diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index a692fb365a..b2a63f9da3 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ddp-rate-limiter', - version: '1.1.0', + version: '1.1.0-beta.1', // Brief, one-line summary of the package. summary: 'The DDPRateLimiter allows users to add rate limits to DDP' + ' methods and subscriptions.', diff --git a/packages/ddp/package.js b/packages/ddp/package.js index 630a456199..57d3a8f392 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data framework", - version: '1.4.0' + version: '1.4.0-beta.1' }); Package.onUse(function (api) { diff --git a/packages/diff-sequence/package.js b/packages/diff-sequence/package.js index e81b548ccf..724d07f5cc 100644 --- a/packages/diff-sequence/package.js +++ b/packages/diff-sequence/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "An implementation of a diff algorithm on arrays and objects.", - version: '1.1.2-beta.0', + version: '1.1.2-beta.1', documentation: null }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index a7db21c514..912d667c79 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3-beta.0', + version: '0.16.3-beta.1', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 24754970e9..7bb97eaf35 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.1.3-beta.0' + version: '1.1.3-beta.1' }); Package.onUse(function onUse(api) { diff --git a/packages/email/package.js b/packages/email/package.js index 606513eba7..165485bef1 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.1', + version: '2.2.1-beta.1', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index db269c6ef9..c743758fa8 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1-beta.0' + version: '1.11.1-beta.1' }); Package.onUse(api => { diff --git a/packages/facts-ui/package.js b/packages/facts-ui/package.js index 7267d44a8e..af39e4abbc 100644 --- a/packages/facts-ui/package.js +++ b/packages/facts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Display internal app statistics", - version: '1.0.1-beta.0' + version: '1.0.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/fetch/package.js b/packages/fetch/package.js index b56e1265b8..ff7ae07f4f 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.2-beta.0', + version: '0.1.2-beta.1', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/geojson-utils/package.js b/packages/geojson-utils/package.js index 7bb6607532..27d9790229 100644 --- a/packages/geojson-utils/package.js +++ b/packages/geojson-utils/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GeoJSON utility functions (from https://github.com/maxogden/geojson-js-utils)', - version: '1.0.11-beta.0' + version: '1.0.11-beta.1' }); Package.onUse(function (api) { diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index 9b0c1e3cef..e25f30ec79 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'hot-module-replacement', - version: '0.5.1', + version: '0.5.1-beta.1', summary: 'Update code in development without reloading the page', documentation: 'README.md', debugOnly: true, diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 2f0a1796f8..d5a6bba164 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.1' + version: '1.10.1-beta.1' }); Package.registerBuildPlugin({ diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index 01cd4c954d..f036e318d4 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modern-browsers', - version: '0.1.8', + version: '0.1.8-beta.1', summary: 'API for defining the boundary between modern and legacy ' + 'JavaScript clients', diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 25a4b4ecb6..37d5a3ccfb 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0-beta.0', + version: '4.11.0-beta.1', documentation: null }); diff --git a/packages/promise/package.js b/packages/promise/package.js index c0b3d613b6..1789319d61 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.0", + version: "0.12.0-beta.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/random/package.js b/packages/random/package.js index 3bafb5afde..b31e69aed9 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.0', + version: '1.2.0-beta.1', }); Package.onUse(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index b5ed045e41..4feee4b9ae 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive dictionary", - version: '1.3.0' + version: '1.3.0-beta.1' }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 00b13b2cc2..825c47f181 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.11' + version: '1.0.11-beta.1' }); Package.onUse(function (api) { diff --git a/packages/server-render/package.js b/packages/server-render/package.js index 95e9f2bfcc..ebb95e39a1 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "server-render", - version: "0.4.0", + version: "0.4.0-beta.1", summary: "Generic support for server-side rendering in Meteor apps", documentation: "README.md" }); diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index 10f65825bf..bfb4d322ec 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Manage the configuration for third-party services', - version: '1.3.0', + version: '1.3.0-beta.1', }); Package.onUse(function(api) { diff --git a/packages/session/package.js b/packages/session/package.js index df54addcb8..a4e7962d3c 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.0' + version: '1.2.0-beta.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index fb5e49cf72..8c8b78bea0 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1-beta.0', + version: '1.3.1-beta.1', documentation: null }); diff --git a/packages/tracker/package.js b/packages/tracker/package.js index f56f16be60..3aff7eb4dc 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.0" + version: "1.2.0-beta.1" }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 27eb65c32f..a24f7f32dc 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1-beta.0' + version: '1.3.1-beta.1' }); Package.onUse(function(api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 24c18c9bf4..7a44847212 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.10' + version: '1.0.10-beta.1' }); Package.onUse(function (api) { diff --git a/packages/webapp-hashing/package.js b/packages/webapp-hashing/package.js index 088b184ffe..5c9e43a12d 100644 --- a/packages/webapp-hashing/package.js +++ b/packages/webapp-hashing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Used internally by WebApp. Knows how to hash programs from manifests.", - version: '1.1.1-beta.0' + version: '1.1.1-beta.1' }); Package.onUse(function(api) { diff --git a/packages/webapp/package.js b/packages/webapp/package.js index d2dd15a551..65011e6f5d 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.13.1', + version: '1.13.1-beta.1', }); Npm.depends({ From a43b9649782ef7145d1a73b133880da791d0588d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 11:50:14 -0300 Subject: [PATCH 071/292] Meteor version to 2.8.1-beta.1 :comet: --- packages/check/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/session/package.js | 2 +- packages/tracker/package.js | 2 +- packages/underscore/package.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/check/package.js b/packages/check/package.js index 930480fcbb..084004fee8 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.1-beta.1', + version: '1.3.1', }); Package.onUse(api => { diff --git a/packages/random/package.js b/packages/random/package.js index b31e69aed9..3bafb5afde 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.0-beta.1', + version: '1.2.0', }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 825c47f181..00b13b2cc2 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.11-beta.1' + version: '1.0.11' }); Package.onUse(function (api) { diff --git a/packages/session/package.js b/packages/session/package.js index a4e7962d3c..df54addcb8 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.0-beta.1' + version: '1.2.0' }); Package.onUse(function (api) { diff --git a/packages/tracker/package.js b/packages/tracker/package.js index 3aff7eb4dc..f56f16be60 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.0-beta.1" + version: "1.2.0" }); Package.onUse(function (api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 7a44847212..24c18c9bf4 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.10-beta.1' + version: '1.0.10' }); Package.onUse(function (api) { From 179da8bb8fcf9fe56827fc36c49801334d7559af Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 11:54:37 -0300 Subject: [PATCH 072/292] Revert "Meteor version to 2.8.1-beta.1 :comet:" This reverts commit a43b9649782ef7145d1a73b133880da791d0588d. --- packages/check/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/session/package.js | 2 +- packages/tracker/package.js | 2 +- packages/underscore/package.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/check/package.js b/packages/check/package.js index 084004fee8..930480fcbb 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.1', + version: '1.3.1-beta.1', }); Package.onUse(api => { diff --git a/packages/random/package.js b/packages/random/package.js index 3bafb5afde..b31e69aed9 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.0', + version: '1.2.0-beta.1', }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 00b13b2cc2..825c47f181 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.11' + version: '1.0.11-beta.1' }); Package.onUse(function (api) { diff --git a/packages/session/package.js b/packages/session/package.js index df54addcb8..a4e7962d3c 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.0' + version: '1.2.0-beta.1' }); Package.onUse(function (api) { diff --git a/packages/tracker/package.js b/packages/tracker/package.js index f56f16be60..3aff7eb4dc 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.0" + version: "1.2.0-beta.1" }); Package.onUse(function (api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 24c18c9bf4..7a44847212 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.10' + version: '1.0.10-beta.1' }); Package.onUse(function (api) { From 31d3b2d5f41c2e9cc4e00c5079596323b28720f6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 12:04:40 -0300 Subject: [PATCH 073/292] Meteor version to 2.8.1-beta.1 :comet: --- packages/check/package.js | 2 +- packages/deprecated/jshint/.versions | 8 ++++---- packages/non-core/less/.versions | 10 +++++----- packages/random/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/session/package.js | 2 +- packages/tracker/package.js | 2 +- packages/underscore/package.js | 2 +- tools/tests/apps/app-config/.meteor/versions | 4 ++-- tools/tests/apps/client-refresh/.meteor/versions | 6 +++--- .../compiler-plugin-static-html-error/.meteor/versions | 6 +++--- .../apps/compiler-plugin-static-html/.meteor/versions | 6 +++--- tools/tests/apps/custom-minifier/.meteor/versions | 6 +++--- tools/tests/apps/dynamic-import/.meteor/packages | 6 +++--- tools/tests/apps/dynamic-import/.meteor/versions | 10 +++++----- .../tests/apps/ecmascript-regression/.meteor/packages | 2 +- .../tests/apps/ecmascript-regression/.meteor/versions | 10 +++++----- tools/tests/apps/git-commit-hash/.meteor/versions | 4 ++-- .../apps/link-config-npm-package/.meteor/versions | 4 ++-- .../apps/linked-external-npm-package/.meteor/versions | 4 ++-- tools/tests/apps/meteor-ignore/.meteor/versions | 4 ++-- tools/tests/apps/modules/.meteor/packages | 6 +++--- tools/tests/apps/standard-app/.meteor/versions | 6 +++--- tools/tests/old/app-with-private/.meteor/versions | 4 ++-- 24 files changed, 59 insertions(+), 59 deletions(-) diff --git a/packages/check/package.js b/packages/check/package.js index 930480fcbb..c2ab8cecd9 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.1-beta.1', + version: '1.3.2-beta.1', }); Package.onUse(api => { diff --git a/packages/deprecated/jshint/.versions b/packages/deprecated/jshint/.versions index c5612a10eb..805d53d29e 100644 --- a/packages/deprecated/jshint/.versions +++ b/packages/deprecated/jshint/.versions @@ -5,7 +5,7 @@ base64@1.0.12 binary-heap@1.0.11 boilerplate-generator@1.7.1 callback-hook@1.3.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.4.1 ddp-common@1.4.0 @@ -36,14 +36,14 @@ mongo-id@1.0.8 npm-mongo@3.9.0 ordered-dict@1.1.0 promise@0.11.2 -random@1.2.0 +random@1.2.1-beta.1 react-fast-refresh@0.1.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.0 socket-stream-client@0.3.3 tinytest@1.1.0 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.10.1 webapp-hashing@1.1.0 diff --git a/packages/non-core/less/.versions b/packages/non-core/less/.versions index b8dac39441..624d37670b 100644 --- a/packages/non-core/less/.versions +++ b/packages/non-core/less/.versions @@ -7,7 +7,7 @@ blaze@2.3.4 boilerplate-generator@1.7.1 caching-compiler@1.2.2 callback-hook@1.3.1 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -40,16 +40,16 @@ npm-mongo@3.9.0 observe-sequence@1.0.19 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.0 +random@1.2.1-beta.1 react-fast-refresh@0.1.1 -reactive-var@1.0.11 +reactive-var@1.0.12-beta.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 socket-stream-client@0.4.0 test-helpers@1.2.0 tinytest@1.1.1 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.11.1 webapp-hashing@1.1.0 diff --git a/packages/random/package.js b/packages/random/package.js index b31e69aed9..083dca351b 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.0-beta.1', + version: '1.2.1-beta.1', }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 825c47f181..7569f084c5 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.11-beta.1' + version: '1.0.12-beta.1' }); Package.onUse(function (api) { diff --git a/packages/session/package.js b/packages/session/package.js index a4e7962d3c..58532f2810 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.0-beta.1' + version: '1.2.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/tracker/package.js b/packages/tracker/package.js index 3aff7eb4dc..69789f0e6c 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.0-beta.1" + version: "1.2.1-beta.1" }); Package.onUse(function (api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 7a44847212..527d7d17e9 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.10-beta.1' + version: '1.0.11-beta.1' }); Package.onUse(function (api) { diff --git a/tools/tests/apps/app-config/.meteor/versions b/tools/tests/apps/app-config/.meteor/versions index 23b1d17616..741cf5b27c 100644 --- a/tools/tests/apps/app-config/.meteor/versions +++ b/tools/tests/apps/app-config/.meteor/versions @@ -57,8 +57,8 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.3.2 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 url@1.2.0 webapp@1.5.0 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/client-refresh/.meteor/versions b/tools/tests/apps/client-refresh/.meteor/versions index 087c94fa51..dfd474adf1 100644 --- a/tools/tests/apps/client-refresh/.meteor/versions +++ b/tools/tests/apps/client-refresh/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -47,8 +47,8 @@ standard-minifier-js@2.4.1 static-html@1.2.2 templating-tools@1.1.2 test-package@0.0.1 -tracker@1.2.0 +tracker@1.2.1-beta.1 typescript@3.5.2-beta182.17 -underscore@1.0.10 +underscore@1.0.11-beta.1 webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions index 2112029aa3..c0e1bc65a8 100644 --- a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ standard-minifier-css@1.5.3 standard-minifier-js@2.4.1 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions index 2112029aa3..c0e1bc65a8 100644 --- a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ standard-minifier-css@1.5.3 standard-minifier-js@2.4.1 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/custom-minifier/.meteor/versions b/tools/tests/apps/custom-minifier/.meteor/versions index 0aacfc62db..6f55d66e80 100644 --- a/tools/tests/apps/custom-minifier/.meteor/versions +++ b/tools/tests/apps/custom-minifier/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.2.0 -check@1.3.1 +check@1.3.2-beta.1 custom-minifier@0.0.1 ddp@1.4.0 ddp-client@2.3.3 @@ -45,7 +45,7 @@ socket-stream-client@0.2.2 spacebars-compiler@1.1.3 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.5 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index b74a849e52..e75977188d 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -8,8 +8,8 @@ meteor-base@1.4.0 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.9.0 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views -reactive-var@1.0.11 # Reactive variable for tracker -tracker@1.2.0 # Meteor's client-side reactive programming library +reactive-var@1.0.12-beta.1 # Reactive variable for tracker +tracker@1.2.1-beta.1 # Meteor's client-side reactive programming library standard-minifier-css@1.6.0 # CSS minifier run for production mode standard-minifier-js@2.6.0 # JS minifier run for production mode @@ -23,6 +23,6 @@ dynamic-import@0.5.1 lazy-test-package helper-package user:colon-name -underscore@1.0.10 +underscore@1.0.11-beta.1 fetch@0.1.1 jquery diff --git a/tools/tests/apps/dynamic-import/.meteor/versions b/tools/tests/apps/dynamic-import/.meteor/versions index a99df3012b..3872664234 100644 --- a/tools/tests/apps/dynamic-import/.meteor/versions +++ b/tools/tests/apps/dynamic-import/.meteor/versions @@ -12,7 +12,7 @@ boilerplate-generator@1.7.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.3.0 -check@1.3.1 +check@1.3.2-beta.1 coffeescript@2.4.1 coffeescript-compiler@2.4.1 ddp@1.4.0 @@ -60,8 +60,8 @@ npm-mongo@3.7.0 observe-sequence@1.0.16 ordered-dict@1.1.0 promise@0.11.2 -random@1.2.0 -reactive-var@1.0.11 +random@1.2.1-beta.1 +reactive-var@1.0.12-beta.1 reload@1.3.0 retry@1.1.0 routepolicy@1.1.0 @@ -75,9 +75,9 @@ templating@1.3.2 templating-compiler@1.3.3 templating-runtime@1.3.2 templating-tools@1.1.2 -tracker@1.2.0 +tracker@1.2.1-beta.1 ui@1.0.13 -underscore@1.0.10 +underscore@1.0.11-beta.1 user:colon-name@0.0.1 webapp@1.9.0 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/ecmascript-regression/.meteor/packages b/tools/tests/apps/ecmascript-regression/.meteor/packages index ab27ff6225..5dc670f631 100644 --- a/tools/tests/apps/ecmascript-regression/.meteor/packages +++ b/tools/tests/apps/ecmascript-regression/.meteor/packages @@ -7,7 +7,7 @@ meteor-base@1.5.1 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.13.0 # The database Meteor supports right now -reactive-var@1.0.11 # Reactive variable for tracker +reactive-var@1.0.12-beta.1 # Reactive variable for tracker standard-minifier-css@1.7.4 # CSS minifier run for production mode standard-minifier-js@2.7.0 # JS minifier run for production mode diff --git a/tools/tests/apps/ecmascript-regression/.meteor/versions b/tools/tests/apps/ecmascript-regression/.meteor/versions index de86973195..697b4d7acc 100644 --- a/tools/tests/apps/ecmascript-regression/.meteor/versions +++ b/tools/tests/apps/ecmascript-regression/.meteor/versions @@ -10,7 +10,7 @@ boilerplate-generator@1.7.1 caching-compiler@1.2.2 caching-html-compiler@1.2.1 callback-hook@1.4.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -56,10 +56,10 @@ mongo-id@1.0.8 npm-mongo@3.9.1 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.0 +random@1.2.1-beta.1 react-fast-refresh@0.1.1 react-meteor-data@2.3.3 -reactive-var@1.0.11 +reactive-var@1.0.12-beta.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 @@ -70,9 +70,9 @@ standard-minifier-css@1.7.4 standard-minifier-js@2.7.1 static-html@1.3.2 templating-tools@1.2.1 -tracker@1.2.0 +tracker@1.2.1-beta.1 typescript@4.3.5 -underscore@1.0.10 +underscore@1.0.11-beta.1 url@1.3.2 webapp@1.12.0 webapp-hashing@1.1.0 diff --git a/tools/tests/apps/git-commit-hash/.meteor/versions b/tools/tests/apps/git-commit-hash/.meteor/versions index a10ed1d9c8..fb9d3c8a07 100644 --- a/tools/tests/apps/git-commit-hash/.meteor/versions +++ b/tools/tests/apps/git-commit-hash/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.3-beta181.16 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/link-config-npm-package/.meteor/versions b/tools/tests/apps/link-config-npm-package/.meteor/versions index 91816ff622..4df92e6329 100644 --- a/tools/tests/apps/link-config-npm-package/.meteor/versions +++ b/tools/tests/apps/link-config-npm-package/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.4.0-rc171.6 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.0-rc171.6 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/linked-external-npm-package/.meteor/versions b/tools/tests/apps/linked-external-npm-package/.meteor/versions index 91816ff622..4df92e6329 100644 --- a/tools/tests/apps/linked-external-npm-package/.meteor/versions +++ b/tools/tests/apps/linked-external-npm-package/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.4.0-rc171.6 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.0-rc171.6 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/meteor-ignore/.meteor/versions b/tools/tests/apps/meteor-ignore/.meteor/versions index 2a0c9c4a0e..d0550519a5 100644 --- a/tools/tests/apps/meteor-ignore/.meteor/versions +++ b/tools/tests/apps/meteor-ignore/.meteor/versions @@ -47,7 +47,7 @@ npm-mongo@2.2.30 ordered-dict@1.0.9 promise@0.9.0 random@1.0.10 -reactive-var@1.0.11 +reactive-var@1.0.12-beta.1 reload@1.1.11 retry@1.0.9 routepolicy@1.0.12 @@ -58,7 +58,7 @@ standard-minifier-js@2.1.1 static-html@1.2.2 templating-tools@1.1.2 tracker@1.1.3 -underscore@1.0.10 +underscore@1.0.11-beta.1 url@1.1.0 webapp@1.3.19 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index 2f92a7e262..a8cbf16ab4 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -8,9 +8,9 @@ meteor-base@1.4.0 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.9.0 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views -session@1.2.0 # Client-side reactive dictionary for your app +session@1.2.1-beta.1 # Client-side reactive dictionary for your app jquery # Helpful client-side library -tracker@1.2.0 # Meteor's client-side reactive programming library +tracker@1.2.1-beta.1 # Meteor's client-side reactive programming library es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers. ecmascript@0.14.2 # Enable ECMAScript2015+ syntax in app code @@ -23,7 +23,7 @@ client-only-ecmascript modules-test-plugin shell-server@0.5.0 dynamic-import@0.5.1 -underscore@1.0.10 +underscore@1.0.11-beta.1 import-local-json-module akryum:vue-component dummy-compiler diff --git a/tools/tests/apps/standard-app/.meteor/versions b/tools/tests/apps/standard-app/.meteor/versions index a574733bd2..563d1ca0f3 100644 --- a/tools/tests/apps/standard-app/.meteor/versions +++ b/tools/tests/apps/standard-app/.meteor/versions @@ -6,7 +6,7 @@ base64@1.0.11 binary-heap@1.0.11 boilerplate-generator@1.6.0 callback-hook@1.1.0 -check@1.3.1 +check@1.3.2-beta.1 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ shell-server@0.4.0 socket-stream-client@0.2.2 standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 -tracker@1.2.0 -underscore@1.0.10 +tracker@1.2.1-beta.1 +underscore@1.0.11-beta.1 webapp@1.7.2 webapp-hashing@1.0.9 diff --git a/tools/tests/old/app-with-private/.meteor/versions b/tools/tests/old/app-with-private/.meteor/versions index 4a33deb24f..d3261ace0f 100644 --- a/tools/tests/old/app-with-private/.meteor/versions +++ b/tools/tests/old/app-with-private/.meteor/versions @@ -47,7 +47,7 @@ npm-mongo@2.2.33 ordered-dict@1.0.9 promise@0.10.0 random@1.0.10 -reactive-var@1.0.11 +reactive-var@1.0.12-beta.1 reload@1.1.11 retry@1.0.9 routepolicy@1.0.12 @@ -58,7 +58,7 @@ standard-minifier-js@2.2.1 static-html@1.2.2 templating-tools@1.1.2 tracker@1.1.3 -underscore@1.0.10 +underscore@1.0.11-beta.1 url@1.1.0 webapp@1.4.0 webapp-hashing@1.0.9 From 598b4989704632586f280874e30733728cc9835f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 4 Nov 2022 15:18:43 -0300 Subject: [PATCH 074/292] finished simple implementation --- tools/cli/commands.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index c78c915f18..8bc026e2dd 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2537,11 +2537,9 @@ main.registerCommand({ // get directory where we will place our files const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; - if (scaffoldName.includes('-')) throw new main.ShowUsage; - if (scaffoldName.includes('/')) throw new main.ShowUsage; - const allNonWordRegex = /\W/g; + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; const getFilesInDir = (appDir) => { @@ -2556,11 +2554,14 @@ main.registerCommand({ } /** + * if contains - turns into pascal * @param str{string} * @returns {string} */ - const toPascalCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); - + const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } /** * @@ -2596,15 +2597,19 @@ main.registerCommand({ return transformName(contents.toString()); } }) - // TODO: add to imports to main.js - // before get meteor.mainModule.server string from package.json - // get from package.json - const mainJsPath = files.pathJoin(appDir, 'server', 'main.js'); + const packageJsonPath = files.pathJoin(appDir, 'package.json'); + const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonFile); + + const mainJsPath = + packageJson?.meteor?.mainModule?.server + ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) + : files.pathJoin(appDir, 'server', 'main.js'); const mainJs = files.readFile(mainJsPath); const mainJsLines = mainJs.toString().split('\n'); const importLine = options.path - ? `import ${options.path}/${scaffoldName}';` + ? `import '${options.path}';` : `import '/imports/api/${ scaffoldName }';` const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); From 3d52e69c0001989724e76368130ef37e2bc5f1cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 4 Nov 2022 22:25:59 +0100 Subject: [PATCH 075/292] Implemented Fibers-less MongoDB count methods. --- packages/minimongo/local_collection.js | 8 ++++++++ packages/mongo/collection.js | 7 +++++++ packages/mongo/collection_async_tests.js | 11 +++++++++++ packages/mongo/mongo_driver.js | 10 ++++++++++ packages/mongo/remote_collection_driver.js | 21 ++++++++++++++++++--- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index e3668eeb03..43877fb87e 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,6 +39,14 @@ export default class LocalCollection { this.paused = false; } + countDocuments(selector, options) { + return this.find(selector ?? {}, options).countAsync(); + } + + estimatedDocumentCount(options) { + return this.find({}, options).countAsync(); + } + // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 3dcc12dc96..9185e1c13d 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,6 +319,13 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + countDocuments(...args) { + return this._collection.countDocuments(...args); + }, + + estimatedDocumentCount(...args) { + return this._collection.estimatedDocumentCount(...args); + }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index 5d3a277fa0..d709cee26c 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,3 +19,14 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); + +['countDocuments', 'estimatedDocumentCount'].forEach(method => { + Tinytest.addAsync(`async collection - ${method}`, async test => { + const collection = new Mongo.Collection(method + test.id); + for (let index = 0; index < 10; ++index) { + test.instanceOf(collection[method](), Promise); + test.equal(await collection[method](), index); + collection.insert({}); + } + }); +}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index b8fa60d531..da21e037e2 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -819,6 +819,16 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; +MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + const collection = this.rawCollection(collectionName); + return collection.countDocuments(...args); +}; + +MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + const collection = this.rawCollection(collectionName); + return collection.estimatedDocumentCount(...args); +}; + MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index f237879de0..035af45157 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,13 +4,28 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; +const REMOTE_COLLECTION_METHODS = [ + '_createCappedCollection', + '_dropIndex', + '_ensureIndex', + 'createIndex', + 'countDocuments', + 'dropCollection', + 'estimatedDocumentCount', + 'find', + 'findOne', + 'insert', + 'rawCollection', + 'remove', + 'update', + 'upsert', +]; + Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - ['find', 'findOne', 'insert', 'update', 'upsert', - 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', - 'dropCollection', 'rawCollection'].forEach( + REMOTE_COLLECTION_METHODS.forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); From 73c05c2ca80bf2e454ba8cdbaf0634f19147faed Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:09:36 -0300 Subject: [PATCH 076/292] chore: added validation and logs --- tools/cli/commands.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 8bc026e2dd..241e148e07 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2542,9 +2542,14 @@ main.registerCommand({ const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; + /** + * + * @param appDir + * @returns {string[]} + */ const getFilesInDir = (appDir) => { const appPath = files.pathResolve(appDir); - return files.readdirNoDots(appPath); + return files.readdir(appPath); } const getExtension = () => { @@ -2576,6 +2581,8 @@ main.registerCommand({ /// Program + const rootFiles = getFilesInDir(appDir); + if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; const extension = getExtension() const assetsPath = () => { @@ -2614,6 +2621,7 @@ main.registerCommand({ const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); + Console.info(`Created ${ scaffoldName } scaffold in ${ scaffoldPath }`); return 0; }); From c442071f5e77b1b5c0411d9e1560ef8f22b2bbb5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:09:47 -0300 Subject: [PATCH 077/292] docs: added docs for generate cli --- tools/cli/help.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 13c612e9fd..f666f7df38 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -841,6 +841,20 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` +>>> generate +Generate boilerplate code for a MeteorJS RPC api. It generates a collection with +the name you pass and its methods. Is JS and TS compatible. + +Usage: meteor generate [options] + +Generates a collection.ts|js file with the name you pass and its methods(insert, +update, remove, find, findOne) in a methods.js|ts file. +This is a MeteorJS project command. + +Options: + --help, -h Show this help message. + --path A Path where the files will be generated. Default is the + imports/api directory. >>> publish-release Publish a new meteor release to the package server. From 92f400439a006282dac3f540fa6f199781d3dd6f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 10:39:18 -0300 Subject: [PATCH 078/292] fix: adjusted identation and missing import --- tools/static-assets/scaffolds-ts/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 5538203e55..35eb719b1c 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,4 +1,4 @@ -import { $$UpperName$$Collection } from './collection'; +import { $$UpperName$$, $$UpperName$$Collection } from './collection'; import { save$$UpperName$$, update$$UpperName$$, @@ -7,7 +7,8 @@ import { } from './methods'; export { -$$UpperName$$Collection, + $$UpperName$$, + $$UpperName$$Collection, save$$UpperName$$, update$$UpperName$$, remove$$UpperName$$, From 895f553a8301c978d344bd47bfd088bbab092095 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:04 -0300 Subject: [PATCH 079/292] chore: adjusted index.js for scaffold --- tools/static-assets/scaffolds-js/index.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 032d84717e..7ada47967a 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,15 +1,7 @@ import { $$UpperName$$Collection } from './collection'; -import { - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById -} from './methods'; +import * as $$UpperName$$ from './methods'; export { $$UpperName$$Collection, - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + $$UpperName$$ } From 387016730e7f500b3ce1fd333ef8e530dc66cfa1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:16 -0300 Subject: [PATCH 080/292] chore: adjusted index.ts for scaffold --- tools/static-assets/scaffolds-ts/index.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 35eb719b1c..5d4baf3fed 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,16 +1,8 @@ -import { $$UpperName$$, $$UpperName$$Collection } from './collection'; -import { - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById -} from './methods'; +import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; +import * as $$UpperName$$ from './methods'; export { - $$UpperName$$, + $$UpperName$$Type, $$UpperName$$Collection, - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + $$UpperName$$ } From 73bebcc7de9f1693cbd76f10fe2e8aa1493c582f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:14:38 -0300 Subject: [PATCH 081/292] fix: adjusted typedef for scaffold-ts --- tools/static-assets/scaffolds-ts/collection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 9ca4839cf5..43d29c2922 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,6 +1,6 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$ = { +export type $$UpperName$$Type = { _id?: string; name: string; createdAt: Date; From 78efcc40747446992bce43bb22ba0d52e3134ede Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:15:06 -0300 Subject: [PATCH 082/292] fix: adressed comments in methods.js in scaffolds --- tools/static-assets/scaffolds-js/methods.js | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 9ad38e68ab..5cfdf95dca 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,25 @@ -import { Meteor } from 'meteor/meteor' +import { Meteor } from 'meteor/meteor'; import { $$UpperName$$Collection } from './collection'; -export const save$$UpperName$$ = async (data) => { - return await $$UpperName$$Collection.insertAsync({ ...data }); +export function create$$UpperName$$(data) { + return $$UpperName$$Collection.insertAsync({ ...data }); } -export const update$$UpperName$$ = async (_id, data) => { - return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update$$UpperName$$(_id, data) { + return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export const remove$$UpperName$$ = async (_id) => { - return await $$UpperName$$Collection.removeAsync(_id); +export function remove$$UpperName$$(_id) { + return $$UpperName$$Collection.removeAsync(_id); } -export const find$$UpperName$$ById = async (_id) => { - return await $$UpperName$$Collection.findOneAsync(_id); +export function find$$UpperName$$ById(_id) { + return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + '$$UpperName$$.create': create$$UpperName$$, + '$$UpperName$$.update': update$$UpperName$$, + '$$UpperName$$.remove': remove$$UpperName$$, + '$$UpperName$$.find': find$$UpperName$$ById }); From 6235fba792745456d94b9da9d975c8f08c63c7b1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:15:28 -0300 Subject: [PATCH 083/292] fix: adressed comments in methods.ts in scaffolds-ts --- tools/static-assets/scaffolds-ts/methods.ts | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 18ab0a171b..68cfebb8a6 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,25 +1,25 @@ -import { Meteor } from 'meteor/meteor' -import { $$UpperName$$ , $$UpperName$$Collection } from './collection'; +import { Meteor } from 'meteor/meteor'; +import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; -export const save$$UpperName$$ = async (data: $$UpperName$$) => { - return await $$UpperName$$Collection.insertAsync({ ...data }); +export function create$$UpperName$$(data: $$UpperName$$Type) { + return $$UpperName$$Collection.insertAsync({ ...data }); } -export const update$$UpperName$$ = async (_id: string, data: Partial<$$UpperName$$>) => { - return await $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update$$UpperName$$(_id: string, data: Partial<$$UpperName$$Type>) { + return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export const remove$$UpperName$$ = async (_id: string) => { - return await $$UpperName$$Collection.removeAsync(_id); +export function remove$$UpperName$$(_id: string) { + return $$UpperName$$Collection.removeAsync(_id); } -export const find$$UpperName$$ById = async (_id: string) => { - return await $$UpperName$$Collection.findOneAsync(_id); +export function find$$UpperName$$ById(_id: string) { + return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - save$$UpperName$$, - update$$UpperName$$, - remove$$UpperName$$, - find$$UpperName$$ById + '$$UpperName$$.create': create$$UpperName$$, + '$$UpperName$$.update': update$$UpperName$$, + '$$UpperName$$.remove': remove$$UpperName$$, + '$$UpperName$$.find': find$$UpperName$$ById }); From 2cd00980a6b622ce85d90dfa22e25a4af27b7ce7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:59:33 -0300 Subject: [PATCH 084/292] feat: bumps dev-bundle --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 29d45ea978..0779da7ba2 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.0.0 +BUNDLE_VERSION=14.21.1.0 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 4adfd637e30a8694d64e216a20480b8d0d363c2a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 15:59:36 -0300 Subject: [PATCH 085/292] feat: bumps dev-bundle --- scripts/build-dev-bundle-common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index 31655db57d..ef6013c4e5 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,7 +5,7 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=14.21.0 +NODE_VERSION=14.21.1 MONGO_VERSION_64BIT=5.0.5 MONGO_VERSION_32BIT=3.2.22 NPM_VERSION=6.14.17 From 9afbdc7e75397c1eddbb5f9bcb8724250e09872e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 17:05:39 -0300 Subject: [PATCH 086/292] Meteor version to 2.8.1-beta.2 :comet: --- packages/accounts-base/package.js | 2 +- packages/browser-policy-common/package.js | 2 +- packages/browser-policy-framing/package.js | 2 +- packages/browser-policy/package.js | 2 +- packages/check/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ddp-rate-limiter/package.js | 2 +- packages/ddp/package.js | 2 +- packages/deprecated/jshint/.versions | 8 ++++---- packages/diff-sequence/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/ejson/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/facts-ui/package.js | 2 +- packages/fetch/package.js | 2 +- packages/geojson-utils/package.js | 2 +- packages/hot-module-replacement/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/modern-browsers/package.js | 2 +- packages/modules-runtime-hot/package.js | 2 +- packages/modules-runtime/package.js | 2 +- packages/mongo/package.js | 2 +- packages/non-core/less/.versions | 10 +++++----- packages/npm-mongo/package.js | 2 +- .../package-version-parser-tests.js | 2 +- packages/promise/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-dict/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/server-render/package.js | 2 +- packages/service-configuration/package.js | 2 +- packages/session/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tracker/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/underscore/package.js | 2 +- packages/webapp-hashing/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 41 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 3627de74eb..99b70c06ed 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5-beta.1', + version: '2.2.5-beta.2', }); Package.onUse(api => { diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 14a26977dc..8a06781697 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for browser-policy packages", - version: "1.0.11-beta.1" + version: "1.0.11-beta.2" }); Package.onUse(function (api) { diff --git a/packages/browser-policy-framing/package.js b/packages/browser-policy-framing/package.js index 22f88cec8a..9670b17861 100644 --- a/packages/browser-policy-framing/package.js +++ b/packages/browser-policy-framing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Restrict which websites can frame your app", - version: '1.1.1-beta.1' + version: '1.1.1-beta.2' }); Package.onUse(function (api) { diff --git a/packages/browser-policy/package.js b/packages/browser-policy/package.js index 81ebcdb92c..0b68e0ce8b 100644 --- a/packages/browser-policy/package.js +++ b/packages/browser-policy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure security policies enforced by the browser", - version: '1.1.1-beta.1' + version: '1.1.1-beta.2' }); Package.onUse(function (api) { diff --git a/packages/check/package.js b/packages/check/package.js index c2ab8cecd9..4462fad3e2 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.2-beta.1', + version: '1.3.2-beta.2', }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 6bd131ffd3..3de1122c5d 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.1-beta.1', + version: '2.6.1-beta.2', documentation: null }); diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index b2a63f9da3..87c68ae5e5 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ddp-rate-limiter', - version: '1.1.0-beta.1', + version: '1.1.0-beta.2', // Brief, one-line summary of the package. summary: 'The DDPRateLimiter allows users to add rate limits to DDP' + ' methods and subscriptions.', diff --git a/packages/ddp/package.js b/packages/ddp/package.js index 57d3a8f392..d60c7fc16b 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data framework", - version: '1.4.0-beta.1' + version: '1.4.0-beta.2' }); Package.onUse(function (api) { diff --git a/packages/deprecated/jshint/.versions b/packages/deprecated/jshint/.versions index 805d53d29e..e7a3a229fa 100644 --- a/packages/deprecated/jshint/.versions +++ b/packages/deprecated/jshint/.versions @@ -5,7 +5,7 @@ base64@1.0.12 binary-heap@1.0.11 boilerplate-generator@1.7.1 callback-hook@1.3.0 -check@1.3.2-beta.1 +check@1.3.2-beta.2 ddp@1.4.0 ddp-client@2.4.1 ddp-common@1.4.0 @@ -36,14 +36,14 @@ mongo-id@1.0.8 npm-mongo@3.9.0 ordered-dict@1.1.0 promise@0.11.2 -random@1.2.1-beta.1 +random@1.2.1-beta.2 react-fast-refresh@0.1.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.0 socket-stream-client@0.3.3 tinytest@1.1.0 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1-beta.2 +underscore@1.0.11-beta.2 webapp@1.10.1 webapp-hashing@1.1.0 diff --git a/packages/diff-sequence/package.js b/packages/diff-sequence/package.js index 724d07f5cc..0c8507666d 100644 --- a/packages/diff-sequence/package.js +++ b/packages/diff-sequence/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "An implementation of a diff algorithm on arrays and objects.", - version: '1.1.2-beta.1', + version: '1.1.2-beta.2', documentation: null }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 912d667c79..4d9014ddf2 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3-beta.1', + version: '0.16.3-beta.2', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 7bb97eaf35..e746971d1e 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.1.3-beta.1' + version: '1.1.3-beta.2' }); Package.onUse(function onUse(api) { diff --git a/packages/email/package.js b/packages/email/package.js index 165485bef1..9a8d92ece4 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.1-beta.1', + version: '2.2.1-beta.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index c743758fa8..c1f4dad023 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1-beta.1' + version: '1.11.1-beta.2' }); Package.onUse(api => { diff --git a/packages/facts-ui/package.js b/packages/facts-ui/package.js index af39e4abbc..41299598ba 100644 --- a/packages/facts-ui/package.js +++ b/packages/facts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Display internal app statistics", - version: '1.0.1-beta.1' + version: '1.0.1-beta.2' }); Package.onUse(function (api) { diff --git a/packages/fetch/package.js b/packages/fetch/package.js index ff7ae07f4f..a7312b518d 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.2-beta.1', + version: '0.1.2-beta.2', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/geojson-utils/package.js b/packages/geojson-utils/package.js index 27d9790229..4a56aee6f9 100644 --- a/packages/geojson-utils/package.js +++ b/packages/geojson-utils/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GeoJSON utility functions (from https://github.com/maxogden/geojson-js-utils)', - version: '1.0.11-beta.1' + version: '1.0.11-beta.2' }); Package.onUse(function (api) { diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index e25f30ec79..f46568e38f 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'hot-module-replacement', - version: '0.5.1-beta.1', + version: '0.5.1-beta.2', summary: 'Update code in development without reloading the page', documentation: 'README.md', debugOnly: true, diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index e5c8ded7c7..84c8bd7041 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1-beta.1', + version: '2.8.1-beta.2', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index d5a6bba164..4cf2423190 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.1-beta.1' + version: '1.10.1-beta.2' }); Package.registerBuildPlugin({ diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index f036e318d4..157d6ed62a 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modern-browsers', - version: '0.1.8-beta.1', + version: '0.1.8-beta.2', summary: 'API for defining the boundary between modern and legacy ' + 'JavaScript clients', diff --git a/packages/modules-runtime-hot/package.js b/packages/modules-runtime-hot/package.js index e06c2b1892..4ea5c471c1 100644 --- a/packages/modules-runtime-hot/package.js +++ b/packages/modules-runtime-hot/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modules-runtime-hot', - version: '0.14.1-beta.1', + version: '0.14.1-beta.2', summary: 'Patches modules-runtime to support Hot Module Replacement', git: 'https://github.com/benjamn/install', documentation: 'README.md', diff --git a/packages/modules-runtime/package.js b/packages/modules-runtime/package.js index 8253f2ecdd..93c7fe58ca 100644 --- a/packages/modules-runtime/package.js +++ b/packages/modules-runtime/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules-runtime", - version: '0.13.2-beta.1', + version: '0.13.2-beta.2', summary: "CommonJS module system", git: "https://github.com/benjamn/install", documentation: "README.md" diff --git a/packages/mongo/package.js b/packages/mongo/package.js index b5a848fd14..2020a960be 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1-beta.1' + version: '1.16.1-beta.2' }); Npm.depends({ diff --git a/packages/non-core/less/.versions b/packages/non-core/less/.versions index 624d37670b..35cdc2ddcd 100644 --- a/packages/non-core/less/.versions +++ b/packages/non-core/less/.versions @@ -7,7 +7,7 @@ blaze@2.3.4 boilerplate-generator@1.7.1 caching-compiler@1.2.2 callback-hook@1.3.1 -check@1.3.2-beta.1 +check@1.3.2-beta.2 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -40,16 +40,16 @@ npm-mongo@3.9.0 observe-sequence@1.0.19 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.1-beta.1 +random@1.2.1-beta.2 react-fast-refresh@0.1.1 -reactive-var@1.0.12-beta.1 +reactive-var@1.0.12-beta.2 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 socket-stream-client@0.4.0 test-helpers@1.2.0 tinytest@1.1.1 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1-beta.2 +underscore@1.0.11-beta.2 webapp@1.11.1 webapp-hashing@1.1.0 diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 37d5a3ccfb..42205159b3 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0-beta.1', + version: '4.11.0-beta.2', documentation: null }); diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 855dc56057..8d24d28da5 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -434,7 +434,7 @@ Tinytest.add( compare("1.0.0-alpha.1", "1.0.0-alpha.beta", "<"); compare("1.0.0-alpha.beta", "1.0.0-beta", "<"); compare("1.0.0-beta", "1.0.0-beta.2", "<"); - compare("1.0.0-beta.2", "1.0.0-beta.11", "<"); + compare("1.0.0-beta.2", "1.0.0-beta.21", "<"); compare("1.0.0-beta.11", "1.0.0-rc.1", "<"); compare("1.0.0-rc.1", "1.0.0", "<"); diff --git a/packages/promise/package.js b/packages/promise/package.js index 1789319d61..1d86c5aa5b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.0-beta.1", + version: "0.12.0-beta.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/random/package.js b/packages/random/package.js index 083dca351b..448a18f0b6 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.1-beta.1', + version: '1.2.1-beta.2', }); Package.onUse(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index 4feee4b9ae..717766700c 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive dictionary", - version: '1.3.0-beta.1' + version: '1.3.0-beta.2' }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 7569f084c5..95a1c5e8ec 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.12-beta.1' + version: '1.0.12-beta.2' }); Package.onUse(function (api) { diff --git a/packages/server-render/package.js b/packages/server-render/package.js index ebb95e39a1..a48445c25a 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "server-render", - version: "0.4.0-beta.1", + version: "0.4.0-beta.2", summary: "Generic support for server-side rendering in Meteor apps", documentation: "README.md" }); diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index bfb4d322ec..8011eccece 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Manage the configuration for third-party services', - version: '1.3.0-beta.1', + version: '1.3.0-beta.2', }); Package.onUse(function(api) { diff --git a/packages/session/package.js b/packages/session/package.js index 58532f2810..d01f20a09a 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.1-beta.1' + version: '1.2.1-beta.2' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 8c8b78bea0..7c808fe28a 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1-beta.1', + version: '1.3.1-beta.2', documentation: null }); diff --git a/packages/tracker/package.js b/packages/tracker/package.js index 69789f0e6c..9e121e160b 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.1-beta.1" + version: "1.2.1-beta.2" }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index a24f7f32dc..f41a001d16 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1-beta.1' + version: '1.3.1-beta.2' }); Package.onUse(function(api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 527d7d17e9..09cf595668 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.11-beta.1' + version: '1.0.11-beta.2' }); Package.onUse(function (api) { diff --git a/packages/webapp-hashing/package.js b/packages/webapp-hashing/package.js index 5c9e43a12d..f4920fe468 100644 --- a/packages/webapp-hashing/package.js +++ b/packages/webapp-hashing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Used internally by WebApp. Knows how to hash programs from manifests.", - version: '1.1.1-beta.1' + version: '1.1.1-beta.2' }); Package.onUse(function(api) { diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 65011e6f5d..9b04cc8cac 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.13.1-beta.1', + version: '1.13.1-beta.2', }); Npm.depends({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index d60ac53c6c..93ccc8d124 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-beta.1", + "version": "2.8.1-beta.2", "recommended": false, "official": false, "description": "Meteor experimental release" From 0df94408efb34b1657cedfc5b6f33aaf930bef58 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 7 Nov 2022 20:27:26 -0300 Subject: [PATCH 087/292] addressed comments --- tools/static-assets/scaffolds-js/index.js | 9 ++------- tools/static-assets/scaffolds-ts/index.ts | 10 ++-------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 7ada47967a..3557535d10 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,7 +1,2 @@ -import { $$UpperName$$Collection } from './collection'; -import * as $$UpperName$$ from './methods'; - -export { - $$UpperName$$Collection, - $$UpperName$$ -} +export * from "./collection"; +export * from "./methods"; diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 5d4baf3fed..3557535d10 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,8 +1,2 @@ -import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; -import * as $$UpperName$$ from './methods'; - -export { - $$UpperName$$Type, - $$UpperName$$Collection, - $$UpperName$$ -} +export * from "./collection"; +export * from "./methods"; From ee047e7dc1f443ac3bc6b81b6467e4b8b71d58d8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:14 -0300 Subject: [PATCH 088/292] fixed single quote in index.js --- tools/static-assets/scaffolds-js/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index 3557535d10..ccfc548f4e 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,2 +1,2 @@ -export * from "./collection"; -export * from "./methods"; +export * from './collection'; +export * from './methods'; From f72f08665e08755a17f236d8ec4e27dd85208aea Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:24 -0300 Subject: [PATCH 089/292] fixed single quote in index.ts --- tools/static-assets/scaffolds-ts/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index 3557535d10..ccfc548f4e 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,2 +1,2 @@ -export * from "./collection"; -export * from "./methods"; +export * from './collection'; +export * from './methods'; From c5636d2608764782f7f41a924f74d76999bb544c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:40 -0300 Subject: [PATCH 090/292] fix: addressed comments in collection.ts --- tools/static-assets/scaffolds-ts/collection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 43d29c2922..217015d82d 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,9 +1,9 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$Type = { +export type $$UpperName$$ = { _id?: string; name: string; createdAt: Date; } -export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); +export const $$UpperName$$Collection = new Mongo.Collection<$$UpperName$$, $$UpperName$$>('$$name$$'); From 0253cc0bb2223536dcbaeba050e183caaeab7da8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:54:55 -0300 Subject: [PATCH 091/292] fix: updated names in methods.js --- tools/static-assets/scaffolds-js/methods.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 5cfdf95dca..286a8a520f 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,25 @@ import { Meteor } from 'meteor/meteor'; import { $$UpperName$$Collection } from './collection'; -export function create$$UpperName$$(data) { +export function create(data) { return $$UpperName$$Collection.insertAsync({ ...data }); } -export function update$$UpperName$$(_id, data) { +export function update(_id, data) { return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export function remove$$UpperName$$(_id) { +export function remove(_id) { return $$UpperName$$Collection.removeAsync(_id); } -export function find$$UpperName$$ById(_id) { +export function findById(_id) { return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create$$UpperName$$, - '$$UpperName$$.update': update$$UpperName$$, - '$$UpperName$$.remove': remove$$UpperName$$, - '$$UpperName$$.find': find$$UpperName$$ById + '$$UpperName$$.create': create, + '$$UpperName$$.update': update, + '$$UpperName$$.remove': remove, + '$$UpperName$$.find': findById }); From a4e1a00bcac15e80808eeb6b79bea160584df48a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 09:55:06 -0300 Subject: [PATCH 092/292] fix: updated names in methods.ts --- tools/static-assets/scaffolds-ts/methods.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 68cfebb8a6..1a0989089e 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,25 +1,26 @@ import { Meteor } from 'meteor/meteor'; -import { $$UpperName$$Type, $$UpperName$$Collection } from './collection'; +import { Mongo } from 'meteor/mongo'; +import { $$UpperName$$, $$UpperName$$Collection } from './collection'; -export function create$$UpperName$$(data: $$UpperName$$Type) { +export function create(data: $$UpperName$$) { return $$UpperName$$Collection.insertAsync({ ...data }); } -export function update$$UpperName$$(_id: string, data: Partial<$$UpperName$$Type>) { +export function update(_id: string, data: Mongo.Modifier<$$UpperName$$>) { return $$UpperName$$Collection.updateAsync(_id, { ...data }); } -export function remove$$UpperName$$(_id: string) { +export function remove(_id: string) { return $$UpperName$$Collection.removeAsync(_id); } -export function find$$UpperName$$ById(_id: string) { +export function findById(_id: string) { return $$UpperName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create$$UpperName$$, - '$$UpperName$$.update': update$$UpperName$$, - '$$UpperName$$.remove': remove$$UpperName$$, - '$$UpperName$$.find': find$$UpperName$$ById + '$$UpperName$$.create': create, + '$$UpperName$$.update': update, + '$$UpperName$$.remove': remove, + '$$UpperName$$.find': findById }); From 4ecfcb10a431bc5c5a2bb9260171d652511339a3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:29 -0300 Subject: [PATCH 093/292] feat: added wizard & template options to generate --- tools/cli/commands.js | 155 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 138 insertions(+), 17 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 241e148e07..4a5caafeed 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1,5 +1,7 @@ var main = require('./main.js'); var _ = require('underscore'); +const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); var files = require('../fs/files'); var deploy = require('../meteor-services/deploy.js'); var buildmessage = require('../utils/buildmessage.js'); @@ -12,6 +14,13 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; +const { + blue, + green, + purple, + red, + yellow +} = require('../console/colors.ts'); var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -2512,30 +2521,95 @@ main.registerCommand({ // generate /////////////////////////////////////////////////////////////////////////////// +/** + * + * @param question + * @returns {Promise} + */ +const ask = async (question) => { + return new Promise((resolve, reject) => { + readline.question(question, (answer) => { + resolve(answer); + }) + }) +} +const sanitizeBoolAnswer = (string) => { -// Examples of generate: -// meteor generate --collection posts -> api/posts/collection.js => Posts -// meteor generate --methods posts -> api/posts/methods.js => Posts -// meteor generate posts ^^ same as above + if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; + + if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; + + Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); + throw main.ShowUsage; +} main.registerCommand({ name: 'generate', maxArgs: 1, - minArgs: 1, + minArgs: 0, options: { path: { type: String }, + methods: { type: Boolean }, + publications: { type: Boolean }, + templatePath : { type: String }, }, pretty: false, catalogRefresh: new catalog.Refresh.Never() -}, function (options) { +}, async function (options) { const { args, appDir } = options; + + + + const setup = async (arg0) => { + if (arg0 === undefined) { + // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model')); + throw main.ShowUsage; + } + const areMethods = await ask('there will be methods? [Y/n] '); + const methods = sanitizeBoolAnswer(areMethods); + const arePublications = await ask('there will be publications? [Y/n] '); + const publications = sanitizeBoolAnswer(arePublications); + const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); + return { + isWizard: true, + scaffoldName, + path, + methods, + publications, + } + } + + const { + path, + methods, + publications + } = options; + + return { + isWizard: false, + scaffoldName: arg0, + path, + methods, + publications, + } + } /** * @type{string} */ - const scaffoldName = args[0]; + const { + isWizard, + scaffoldName, + path, + methods, + publications + } = await setup(args[0]); + // get directory where we will place our files - const scaffoldPath = options.path ||`${ appDir }/imports/api/${ scaffoldName }`; + const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; if (scaffoldName.includes('/')) throw new main.ShowUsage; @@ -2567,25 +2641,52 @@ main.registerCommand({ if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); else return str.split('-').map(toPascalCase).join(''); } - + const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } /** * * @param name {string} */ const transformName = (name) => { - return name.replace(/\$\$name\$\$|\$\$UpperName\$\$/g, function (substring, args) { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { if (substring === '$$name$$') return scaffoldName; - if (substring === '$$UpperName$$') return toPascalCase(scaffoldName); + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); }) } - + /** + * + * @param content{string} + * @param fileName{string} + * @returns {string} + */ + const removeUnusedLines = (content, fileName) => { + if (methods && publications) return content; + if (!methods && !publications) return content; + if(!fileName.startsWith('index')) return content; + return content + .split('\n') + .filter(line => { + if (!methods && line.includes('methods')) return false; + if (!publications && line.includes('publications')) return false; + return true; + }) + .join('\n'); + } /// Program const rootFiles = getFilesInDir(appDir); if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; const extension = getExtension() const assetsPath = () => { + if (options.templatePath){ + const templatePath = files.pathJoin(appDir, options.templatePath) + Console.info(`Using template that is in: ${purple(templatePath)}`) + return templatePath; + } return files.pathJoin( __dirnameConverted, '..', @@ -2596,15 +2697,35 @@ main.registerCommand({ const isOk = files.mkdir_p(scaffoldPath); // Remember to write that code 2 means that something went wrong on creating the folder if (!isOk) return 2; + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { return transformName(f); }, - transformContents: function (contents, file) { - return transformName(contents.toString()); + transformContents: function (contents, fileName) { + const cleaned = removeUnusedLines(contents.toString(), fileName); + return transformName(cleaned); } }) + const checkAndRemoveFiles = () => { + if (!methods) + files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); + + if (!publications) + files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); + } + + const xor = (a, b) => ( a || b ) && !( a && b ); + + if (!isWizard && xor(methods, publications)) { + checkAndRemoveFiles() + } + + if (isWizard) { + checkAndRemoveFiles() + } + const packageJsonPath = files.pathJoin(appDir, 'package.json'); const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); const packageJson = JSON.parse(packageJsonFile); @@ -2615,13 +2736,13 @@ main.registerCommand({ : files.pathJoin(appDir, 'server', 'main.js'); const mainJs = files.readFile(mainJsPath); const mainJsLines = mainJs.toString().split('\n'); - const importLine = options.path - ? `import '${options.path}';` + const importLine = path + ? `import '${path}';` : `import '/imports/api/${ scaffoldName }';` const mainJsFile = [importLine, ...mainJsLines].join('\n'); files.writeFile(mainJsPath, mainJsFile); - Console.info(`Created ${ scaffoldName } scaffold in ${ scaffoldPath }`); + Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); return 0; }); From d2e6d1fb2444b010add7b4296cf7a8215a5c839f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:42 -0300 Subject: [PATCH 094/292] feat: Colors for Meteor CLI --- tools/console/colors.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tools/console/colors.ts diff --git a/tools/console/colors.ts b/tools/console/colors.ts new file mode 100644 index 0000000000..685888c57d --- /dev/null +++ b/tools/console/colors.ts @@ -0,0 +1,14 @@ +type Color = (text: string) => string; +const yellow: Color = (text) => `\x1b[33m${ text }\x1b[0m`; +const red: Color = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; +const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; + +export { + yellow, + red, + purple, + green, + blue, +}; From 8a9b637a6dec6b514e6a8f8585f7e90cd8defa20 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:24:50 -0300 Subject: [PATCH 095/292] docs: added docs for meteor generate --- tools/cli/help.txt | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index f666f7df38..089b5e48a8 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -842,19 +842,32 @@ environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` >>> generate -Generate boilerplate code for a MeteorJS RPC api. It generates a collection with -the name you pass and its methods. Is JS and TS compatible. -Usage: meteor generate [options] +Generate boilerplate code for a MeteorJS RPC api. +It generates a collection with the name you pass and its methods. +Is JS and TS compatible. No collection name +runs the wizard. + +Usage: meteor generate [] [options] + +By default, generates a collection.ts|js file with the name you pass, +methods(insert, update, remove, find, findOne) in a methods.js|ts file +and publications.js|ts. If you just use the command without collectionName, +it will generate run the wizard, asking you what is necessary. + +We do have as well the templatePath, wich uses the template you pass to generate +the boilerplate code. You can use the default template or create your own. +for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. -Generates a collection.ts|js file with the name you pass and its methods(insert, -update, remove, find, findOne) in a methods.js|ts file. This is a MeteorJS project command. Options: - --help, -h Show this help message. - --path A Path where the files will be generated. Default is the - imports/api directory. + --help Show help. + --path The path to the folder where the files will be generated. Default is the current folder. + --templatePath Path to the template file. + --methods Generate methods. + --publications Generate publications. + >>> publish-release Publish a new meteor release to the package server. From 6bb8e8efe70d37fcdf34af35a9d699819dd537c3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:12 -0300 Subject: [PATCH 096/292] chore: changed collection.js to PascalName --- tools/static-assets/scaffolds-js/collection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js index 88592bbe98..a8a92d7cde 100644 --- a/tools/static-assets/scaffolds-js/collection.js +++ b/tools/static-assets/scaffolds-js/collection.js @@ -1,3 +1,3 @@ import { Mongo } from 'meteor/mongo'; -export const $$UpperName$$Collection = new Mongo.Collection('$$name$$'); +export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); From c5ddf4fdaec4872387f02352f3d274d09449add2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:33 -0300 Subject: [PATCH 097/292] feat: added publication template to meteor generate --- tools/static-assets/scaffolds-js/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js index ccfc548f4e..59951d14bb 100644 --- a/tools/static-assets/scaffolds-js/index.js +++ b/tools/static-assets/scaffolds-js/index.js @@ -1,2 +1,3 @@ export * from './collection'; export * from './methods'; +export * from './publications'; From 014456a09e7da8b0e7c6f68bb39527115160ae22 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:42 -0300 Subject: [PATCH 098/292] chore: changed methods.js to PascalName --- tools/static-assets/scaffolds-js/methods.js | 22 ++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 286a8a520f..1b7156c792 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -1,25 +1,29 @@ import { Meteor } from 'meteor/meteor'; -import { $$UpperName$$Collection } from './collection'; +import { check } from 'meteor/check'; +import { $$PascalName$$Collection } from './collection'; export function create(data) { - return $$UpperName$$Collection.insertAsync({ ...data }); + return $$PascalName$$Collection.insertAsync({ ...data }); } export function update(_id, data) { - return $$UpperName$$Collection.updateAsync(_id, { ...data }); + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); } export function remove(_id) { - return $$UpperName$$Collection.removeAsync(_id); + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); } export function findById(_id) { - return $$UpperName$$Collection.findOneAsync(_id); + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create, - '$$UpperName$$.update': update, - '$$UpperName$$.remove': remove, - '$$UpperName$$.find': findById + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById }); From 804c3e9868264acf88de0aa2c2c268cb3d287aac Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:52 -0300 Subject: [PATCH 099/292] feat: added publications to meteor generate --- tools/static-assets/scaffolds-js/publications.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tools/static-assets/scaffolds-js/publications.js diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js new file mode 100644 index 0000000000..c9f61c4533 --- /dev/null +++ b/tools/static-assets/scaffolds-js/publications.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId() { + return $$PascalName$$Collection.find({ userId: this.userId }); +}); + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); From cc57323eed5acdfa3d13fdc50d1fbaad864dcc76 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:25:59 -0300 Subject: [PATCH 100/292] chore: changed collection.js to PascalName --- tools/static-assets/scaffolds-ts/collection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts index 217015d82d..f579cd71a2 100644 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -1,9 +1,9 @@ import { Mongo } from 'meteor/mongo'; -export type $$UpperName$$ = { +export type $$PascalName$$ = { _id?: string; name: string; createdAt: Date; } -export const $$UpperName$$Collection = new Mongo.Collection<$$UpperName$$, $$UpperName$$>('$$name$$'); +export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); From b2013bc1f32e1986263e26cd9f91484a5f576835 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:26:17 -0300 Subject: [PATCH 101/292] feat: added publications to index.ts --- tools/static-assets/scaffolds-ts/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts index ccfc548f4e..59951d14bb 100644 --- a/tools/static-assets/scaffolds-ts/index.ts +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -1,2 +1,3 @@ export * from './collection'; export * from './methods'; +export * from './publications'; From a4274cac405692d32c828a3e17b535b7623b2ccb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:26:25 -0300 Subject: [PATCH 102/292] chore: changed methods.ts to PascalName --- tools/static-assets/scaffolds-ts/methods.ts | 26 ++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 1a0989089e..538010c1c6 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -1,26 +1,30 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; -import { $$UpperName$$, $$UpperName$$Collection } from './collection'; +import { check } from 'meteor/check'; +import { $$PascalName$$, $$PascalName$$Collection } from './collection'; -export function create(data: $$UpperName$$) { - return $$UpperName$$Collection.insertAsync({ ...data }); +export function create(data: $$PascalName$$) { + return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier<$$UpperName$$>) { - return $$UpperName$$Collection.updateAsync(_id, { ...data }); +export function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); } export function remove(_id: string) { - return $$UpperName$$Collection.removeAsync(_id); + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); } export function findById(_id: string) { - return $$UpperName$$Collection.findOneAsync(_id); + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); } Meteor.methods({ - '$$UpperName$$.create': create, - '$$UpperName$$.update': update, - '$$UpperName$$.remove': remove, - '$$UpperName$$.find': findById + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById }); From d3d0f875719520329b4d5f70312b689367e739a9 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 8 Nov 2022 17:27:17 -0300 Subject: [PATCH 103/292] feat: added publication.ts to meteor generate --- tools/static-assets/scaffolds-ts/publications.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tools/static-assets/scaffolds-ts/publications.ts diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts new file mode 100644 index 0000000000..bd960842de --- /dev/null +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('$$PascalName$$sByLoggedUser', function publishTasksByUserId(this) { + return $$PascalName$$Collection.find({ userId: this.userId }); +}); + +Meteor.publish('all$$PascalName$$s', function publishTasks() { + return $$PascalName$$Collection.find({}); +}); From 13c36773b3c1ce6429486a2cd0b6358a0d474ec1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 11:30:54 -0300 Subject: [PATCH 104/292] fix: adjusted publications names --- tools/static-assets/scaffolds-ts/publications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index bd960842de..d8bccbca4c 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publishTasksByUserId(this) { +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this) { return $$PascalName$$Collection.find({ userId: this.userId }); }); -Meteor.publish('all$$PascalName$$s', function publishTasks() { +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 3c0c1f519b9e547d9d6aca5d138c1cf46ac64eb7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 11:31:41 -0300 Subject: [PATCH 105/292] feat: added default options to wizard --- tools/cli/commands.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a5caafeed..2a83c9431a 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2534,13 +2534,14 @@ const ask = async (question) => { }) } const sanitizeBoolAnswer = (string) => { + if (string === '') return true; if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); - throw main.ShowUsage; + throw new main.ShowUsage; } main.registerCommand({ @@ -2566,11 +2567,11 @@ main.registerCommand({ const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); if (scaffoldName === '') { Console.error(red('You must provide a name for your model')); - throw main.ShowUsage; + throw new main.ShowUsage; } - const areMethods = await ask('there will be methods? [Y/n] '); + const areMethods = await ask('there will be methods? press enter for Y [Y/n] '); const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask('there will be publications? [Y/n] '); + const arePublications = await ask('there will be publications? press enter for Y [Y/n] '); const publications = sanitizeBoolAnswer(arePublications); const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); return { From 4101eb4713c90df335092d96180341764b857ce5 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 9 Nov 2022 11:51:35 -0300 Subject: [PATCH 106/292] adding 2.9 migration guide --- guide/source/2.9-migration.md | 102 ++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 guide/source/2.9-migration.md diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md new file mode 100644 index 0000000000..6926ac0459 --- /dev/null +++ b/guide/source/2.9-migration.md @@ -0,0 +1,102 @@ +--- +title: Migrating to Meteor 2.9 +description: How to migrate your application to Meteor 2.9. +--- + +Meteor `2.9` introduces some changes in the `accounts` packages, the new method `Email.sendAsync`, the new method `Meteor.userAsync`, and more. For a complete breakdown of the changes, please refer to the [changelog](http://docs.meteor.com/changelog.html). + + +

Why is this new API important?

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

Why doing this change now?

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

Can I update to this version without changing my app?

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

What's new?

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

New async methods

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

Accounts-base without service-configuration

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

Migrating from a version older than 2.8?

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

Accounts-base without service-configuration

+

Accounts-base without service-configuration

Now `accounts-base` is [no longer tied up](https://github.com/meteor/meteor/pull/12202) with `service-configuration`. So, if you don't use third-party login on your project, you don't need to add the package `service-configuration` anymore. From e553623a6ea92a5c037ffd81c005d8e729b69855 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 12:27:54 -0300 Subject: [PATCH 108/292] feat: added replaceFn --- tools/cli/commands.js | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 2a83c9431a..594cd459e1 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2553,6 +2553,7 @@ main.registerCommand({ methods: { type: Boolean }, publications: { type: Boolean }, templatePath : { type: String }, + replaceFn : { type: String }, }, pretty: false, catalogRefresh: new catalog.Refresh.Never() @@ -2560,7 +2561,6 @@ main.registerCommand({ const { args, appDir } = options; - const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors @@ -2633,6 +2633,27 @@ main.registerCommand({ else return 'js' } + /** + * + * @returns {string} + */ + const userTransformFilenameFn = (filename) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformFilename; + if (typeof replaceFn !== 'function') throw new main.ShowUsage; + return replaceFn(scaffoldName, filename); + } + /** + * + * @returns {string} + */ + const userTransformContentsFn = (contents, fileName) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformContents; + if (typeof replaceFn !== 'function') throw new main.ShowUsage; + return replaceFn(scaffoldName, contents, fileName); + } + /** * if contains - turns into pascal * @param str{string} @@ -2646,6 +2667,7 @@ main.registerCommand({ if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); else return str.split('-').map(toPascalCase).join(''); } + /** * * @param name {string} @@ -2701,9 +2723,11 @@ main.registerCommand({ files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { + if (options.replaceFn) return userTransformFilenameFn(f); return transformName(f); }, transformContents: function (contents, fileName) { + if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); const cleaned = removeUnusedLines(contents.toString(), fileName); return transformName(cleaned); } From a67dddbd78060b211161cac8840ab49b6a38f58d Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 9 Nov 2022 13:48:35 -0300 Subject: [PATCH 109/292] Changing Accounts._checkPassword for sync again and updating migration guide --- guide/source/2.9-migration.md | 2 +- packages/accounts-password/password_server.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guide/source/2.9-migration.md b/guide/source/2.9-migration.md index 52c688ca53..6da327420a 100644 --- a/guide/source/2.9-migration.md +++ b/guide/source/2.9-migration.md @@ -33,7 +33,7 @@ Internal methods that are now async: - **_attemptLogin** - **_loginMethod** - **_runLoginHandlers** -- **Accounts._checkPassword**: still exist but returns a promise, and it has a new version called `Accounts._checkPasswordAsync`. +- **Accounts._checkPassword**: still works as always, but now has a new version called `Accounts._checkPasswordAsync`. We also have changes to asynchronous context in the registry of handlers for OAuth services. diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index 812bf848d1..c44be77f66 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -98,7 +98,7 @@ const checkPasswordAsync = async (user, password) => { return result; }; -const checkPassword = async (user, password) => { +const checkPassword = (user, password) => { return Promise.await(checkPasswordAsync(user, password)); }; From 6d5aca9a52ac037a2145ebc535c1d34cd47990ab Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:19:38 -0300 Subject: [PATCH 110/292] fix: added types to stop the no-infer-any --- tools/static-assets/scaffolds-ts/publications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index d8bccbca4c..6b6e7b6b24 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,7 +1,7 @@ -import { Meteor } from 'meteor/meteor'; +import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this) { +Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this: Subscription) { return $$PascalName$$Collection.find({ userId: this.userId }); }); From efb77200064add8008e1a68950751ae6327dc0ef Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:41:01 -0300 Subject: [PATCH 111/292] docs: added meaningful messages --- tools/cli/commands.js | 68 +++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 594cd459e1..d6e3553620 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2540,7 +2540,8 @@ const sanitizeBoolAnswer = (string) => { if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; - Console.error('\x1b[31mYou must provide a valid answer\x1b[0m'); + Console.error(red('You must provide a valid answer')); + Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); throw new main.ShowUsage; } @@ -2560,18 +2561,39 @@ main.registerCommand({ }, async function (options) { const { args, appDir } = options; + /** + * simple verification fot the name + * @param scaffoldName {string} + */ + const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Names should not be empty.')); + throw new main.ShowUsage; + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Names should not contain slashes.')); + throw new main.ShowUsage; + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Names should not contain special characters except _ and -')); + throw new main.ShowUsage; + } + } const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model')); - throw new main.ShowUsage; - } - const areMethods = await ask('there will be methods? press enter for Y [Y/n] '); + checkScaffoldName(scaffoldName); + const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask('there will be publications? press enter for Y [Y/n] '); + const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); const publications = sanitizeBoolAnswer(arePublications); const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); return { @@ -2608,15 +2630,10 @@ main.registerCommand({ publications } = await setup(args[0]); - + checkScaffoldName(scaffoldName); // get directory where we will place our files const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; - if (scaffoldName.includes('/')) throw new main.ShowUsage; - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) throw new main.ShowUsage; - /** * * @param appDir @@ -2640,7 +2657,11 @@ main.registerCommand({ const userTransformFilenameFn = (filename) => { const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); const replaceFn = require(path).transformFilename; - if (typeof replaceFn !== 'function') throw new main.ShowUsage; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformFilename.')); + Console.error(yellow('The function should be named transformFilename and should be exported.')); + throw new main.ShowUsage; + } return replaceFn(scaffoldName, filename); } /** @@ -2650,7 +2671,11 @@ main.registerCommand({ const userTransformContentsFn = (contents, fileName) => { const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); const replaceFn = require(path).transformContents; - if (typeof replaceFn !== 'function') throw new main.ShowUsage; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformContents.')); + Console.error(yellow('The function should be named transformContents and should be exported.')); + throw new main.ShowUsage; + } return replaceFn(scaffoldName, contents, fileName); } @@ -2701,7 +2726,11 @@ main.registerCommand({ } /// Program const rootFiles = getFilesInDir(appDir); - if (!rootFiles.includes('.meteor')) throw new main.ShowUsage; + if (!rootFiles.includes('.meteor')) { + Console.error(red('You must be in a Meteor project to run this command')); + Console.error(yellow('You can create a new Meteor project with `meteor create`')); + throw new main.ShowUsage; + } const extension = getExtension() const assetsPath = () => { @@ -2718,8 +2747,11 @@ main.registerCommand({ } // create directory const isOk = files.mkdir_p(scaffoldPath); - // Remember to write that code 2 means that something went wrong on creating the folder - if (!isOk) return 2; + if (!isOk) { + Console.error(red('Something went wrong when creating the folder')); + Console.error(yellow('Do you have the correct permissions?')); + return 2; + } files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { transformFilename: function (f) { From 1b60c2c5027d07b8a4b6cf1fd1d0393aed2fbdc2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 9 Nov 2022 15:43:43 -0300 Subject: [PATCH 112/292] fix: updated status codes --- tools/cli/commands.js | 61 ++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index d6e3553620..fb3960f4a8 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -2533,6 +2533,7 @@ const ask = async (question) => { }) }) } + const sanitizeBoolAnswer = (string) => { if (string === '') return true; @@ -2542,7 +2543,32 @@ const sanitizeBoolAnswer = (string) => { Console.error(red('You must provide a valid answer')); Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); +} + +/** + * simple verification for the name + * @param scaffoldName {string} + */ +const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Model names should not be empty.')); + throw new main.ExitWithCode(2); + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain slashes.')); + throw new main.ExitWithCode(2); + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain special characters except _ and -')); + throw new main.ExitWithCode(2); + } } main.registerCommand({ @@ -2561,31 +2587,6 @@ main.registerCommand({ }, async function (options) { const { args, appDir } = options; - /** - * simple verification fot the name - * @param scaffoldName {string} - */ - const checkScaffoldName = (scaffoldName) => { - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model.')); - Console.error(yellow('Names should not be empty.')); - throw new main.ShowUsage; - } - - if (scaffoldName.includes('/')) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Names should not contain slashes.')); - throw new main.ShowUsage; - } - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Names should not contain special characters except _ and -')); - throw new main.ShowUsage; - } - } - const setup = async (arg0) => { if (arg0 === undefined) { // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors @@ -2660,7 +2661,7 @@ main.registerCommand({ if (typeof replaceFn !== 'function') { Console.error(red('You must provide a valid function transformFilename.')); Console.error(yellow('The function should be named transformFilename and should be exported.')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } return replaceFn(scaffoldName, filename); } @@ -2674,7 +2675,7 @@ main.registerCommand({ if (typeof replaceFn !== 'function') { Console.error(red('You must provide a valid function transformContents.')); Console.error(yellow('The function should be named transformContents and should be exported.')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } return replaceFn(scaffoldName, contents, fileName); } @@ -2729,7 +2730,7 @@ main.registerCommand({ if (!rootFiles.includes('.meteor')) { Console.error(red('You must be in a Meteor project to run this command')); Console.error(yellow('You can create a new Meteor project with `meteor create`')); - throw new main.ShowUsage; + throw new main.ExitWithCode(2); } const extension = getExtension() @@ -2750,7 +2751,7 @@ main.registerCommand({ if (!isOk) { Console.error(red('Something went wrong when creating the folder')); Console.error(yellow('Do you have the correct permissions?')); - return 2; + throw new main.ExitWithCode(2); } files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { From 9ddb1eb06a3932dfd44211ffae8d7eaba748a6bd Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 10:18:33 -0300 Subject: [PATCH 113/292] Meteor version to 2.8.1-rc.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/browser-policy-common/package.js | 2 +- packages/browser-policy-framing/package.js | 2 +- packages/browser-policy/package.js | 2 +- packages/check/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ddp-rate-limiter/package.js | 2 +- packages/ddp/package.js | 2 +- packages/deprecated/jshint/.versions | 8 ++++---- packages/diff-sequence/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/ejson/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/facts-ui/package.js | 2 +- packages/fetch/package.js | 2 +- packages/geojson-utils/package.js | 2 +- packages/hot-module-replacement/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/modern-browsers/package.js | 2 +- packages/modules-runtime-hot/package.js | 2 +- packages/modules-runtime/package.js | 2 +- packages/mongo/package.js | 2 +- packages/non-core/less/.versions | 10 +++++----- packages/npm-mongo/package.js | 2 +- .../package-version-parser-tests.js | 2 +- packages/promise/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-dict/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/server-render/package.js | 2 +- packages/service-configuration/package.js | 2 +- packages/session/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tracker/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/underscore/package.js | 2 +- packages/webapp-hashing/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 41 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 99b70c06ed..7077a6fee6 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5-beta.2', + version: '2.2.5-rc.0', }); Package.onUse(api => { diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 8a06781697..6c14aefb43 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for browser-policy packages", - version: "1.0.11-beta.2" + version: "1.0.11-rc.0" }); Package.onUse(function (api) { diff --git a/packages/browser-policy-framing/package.js b/packages/browser-policy-framing/package.js index 9670b17861..6ccaea89b5 100644 --- a/packages/browser-policy-framing/package.js +++ b/packages/browser-policy-framing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Restrict which websites can frame your app", - version: '1.1.1-beta.2' + version: '1.1.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/browser-policy/package.js b/packages/browser-policy/package.js index 0b68e0ce8b..ea68128e8b 100644 --- a/packages/browser-policy/package.js +++ b/packages/browser-policy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure security policies enforced by the browser", - version: '1.1.1-beta.2' + version: '1.1.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/check/package.js b/packages/check/package.js index 4462fad3e2..de01eab25b 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.2-beta.2', + version: '1.3.2-rc.0', }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 3de1122c5d..8c3a48db98 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.1-beta.2', + version: '2.6.1-rc.0', documentation: null }); diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index 87c68ae5e5..06f3991082 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ddp-rate-limiter', - version: '1.1.0-beta.2', + version: '1.1.0-rc.0', // Brief, one-line summary of the package. summary: 'The DDPRateLimiter allows users to add rate limits to DDP' + ' methods and subscriptions.', diff --git a/packages/ddp/package.js b/packages/ddp/package.js index d60c7fc16b..1f33786986 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data framework", - version: '1.4.0-beta.2' + version: '1.4.0-rc.0' }); Package.onUse(function (api) { diff --git a/packages/deprecated/jshint/.versions b/packages/deprecated/jshint/.versions index e7a3a229fa..e29bb428bd 100644 --- a/packages/deprecated/jshint/.versions +++ b/packages/deprecated/jshint/.versions @@ -5,7 +5,7 @@ base64@1.0.12 binary-heap@1.0.11 boilerplate-generator@1.7.1 callback-hook@1.3.0 -check@1.3.2-beta.2 +check@1.3.2-rc.0 ddp@1.4.0 ddp-client@2.4.1 ddp-common@1.4.0 @@ -36,14 +36,14 @@ mongo-id@1.0.8 npm-mongo@3.9.0 ordered-dict@1.1.0 promise@0.11.2 -random@1.2.1-beta.2 +random@1.2.1-rc.0 react-fast-refresh@0.1.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.0 socket-stream-client@0.3.3 tinytest@1.1.0 -tracker@1.2.1-beta.2 -underscore@1.0.11-beta.2 +tracker@1.2.1-rc.0 +underscore@1.0.11-rc.0 webapp@1.10.1 webapp-hashing@1.1.0 diff --git a/packages/diff-sequence/package.js b/packages/diff-sequence/package.js index 0c8507666d..063b7b0fbe 100644 --- a/packages/diff-sequence/package.js +++ b/packages/diff-sequence/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "An implementation of a diff algorithm on arrays and objects.", - version: '1.1.2-beta.2', + version: '1.1.2-rc.0', documentation: null }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 4d9014ddf2..18dc04f858 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3-beta.2', + version: '0.16.3-rc.0', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index e746971d1e..2a1edd9b94 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.1.3-beta.2' + version: '1.1.3-rc.0' }); Package.onUse(function onUse(api) { diff --git a/packages/email/package.js b/packages/email/package.js index 9a8d92ece4..6b486b0c40 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.1-beta.2', + version: '2.2.1-rc.0', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index c1f4dad023..0b74b97cab 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1-beta.2' + version: '1.11.1-rc.0' }); Package.onUse(api => { diff --git a/packages/facts-ui/package.js b/packages/facts-ui/package.js index 41299598ba..f0ef32f5bf 100644 --- a/packages/facts-ui/package.js +++ b/packages/facts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Display internal app statistics", - version: '1.0.1-beta.2' + version: '1.0.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/fetch/package.js b/packages/fetch/package.js index a7312b518d..a54555be07 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.2-beta.2', + version: '0.1.2-rc.0', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/geojson-utils/package.js b/packages/geojson-utils/package.js index 4a56aee6f9..156ba4c54b 100644 --- a/packages/geojson-utils/package.js +++ b/packages/geojson-utils/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GeoJSON utility functions (from https://github.com/maxogden/geojson-js-utils)', - version: '1.0.11-beta.2' + version: '1.0.11-rc.0' }); Package.onUse(function (api) { diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index f46568e38f..b269173f92 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'hot-module-replacement', - version: '0.5.1-beta.2', + version: '0.5.1-rc.0', summary: 'Update code in development without reloading the page', documentation: 'README.md', debugOnly: true, diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 84c8bd7041..70b5c56a00 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1-beta.2', + version: '2.8.1-rc.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 4cf2423190..9e63b16844 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.1-beta.2' + version: '1.10.1-rc.0' }); Package.registerBuildPlugin({ diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index 157d6ed62a..98dc758315 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modern-browsers', - version: '0.1.8-beta.2', + version: '0.1.8-rc.0', summary: 'API for defining the boundary between modern and legacy ' + 'JavaScript clients', diff --git a/packages/modules-runtime-hot/package.js b/packages/modules-runtime-hot/package.js index 4ea5c471c1..b22e874a96 100644 --- a/packages/modules-runtime-hot/package.js +++ b/packages/modules-runtime-hot/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modules-runtime-hot', - version: '0.14.1-beta.2', + version: '0.14.1-rc.0', summary: 'Patches modules-runtime to support Hot Module Replacement', git: 'https://github.com/benjamn/install', documentation: 'README.md', diff --git a/packages/modules-runtime/package.js b/packages/modules-runtime/package.js index 93c7fe58ca..046d129f60 100644 --- a/packages/modules-runtime/package.js +++ b/packages/modules-runtime/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules-runtime", - version: '0.13.2-beta.2', + version: '0.13.2-rc.0', summary: "CommonJS module system", git: "https://github.com/benjamn/install", documentation: "README.md" diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 2020a960be..ba7744a1ca 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1-beta.2' + version: '1.16.1-rc.0' }); Npm.depends({ diff --git a/packages/non-core/less/.versions b/packages/non-core/less/.versions index 35cdc2ddcd..fee8b829eb 100644 --- a/packages/non-core/less/.versions +++ b/packages/non-core/less/.versions @@ -7,7 +7,7 @@ blaze@2.3.4 boilerplate-generator@1.7.1 caching-compiler@1.2.2 callback-hook@1.3.1 -check@1.3.2-beta.2 +check@1.3.2-rc.0 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -40,16 +40,16 @@ npm-mongo@3.9.0 observe-sequence@1.0.19 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.1-beta.2 +random@1.2.1-rc.0 react-fast-refresh@0.1.1 -reactive-var@1.0.12-beta.2 +reactive-var@1.0.12-rc.0 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 socket-stream-client@0.4.0 test-helpers@1.2.0 tinytest@1.1.1 -tracker@1.2.1-beta.2 -underscore@1.0.11-beta.2 +tracker@1.2.1-rc.0 +underscore@1.0.11-rc.0 webapp@1.11.1 webapp-hashing@1.1.0 diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 42205159b3..3f4f649765 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0-beta.2', + version: '4.11.0-rc.0', documentation: null }); diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 8d24d28da5..855dc56057 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -434,7 +434,7 @@ Tinytest.add( compare("1.0.0-alpha.1", "1.0.0-alpha.beta", "<"); compare("1.0.0-alpha.beta", "1.0.0-beta", "<"); compare("1.0.0-beta", "1.0.0-beta.2", "<"); - compare("1.0.0-beta.2", "1.0.0-beta.21", "<"); + compare("1.0.0-beta.2", "1.0.0-beta.11", "<"); compare("1.0.0-beta.11", "1.0.0-rc.1", "<"); compare("1.0.0-rc.1", "1.0.0", "<"); diff --git a/packages/promise/package.js b/packages/promise/package.js index 1d86c5aa5b..8737ce08f7 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.0-beta.2", + version: "0.12.0-rc.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/random/package.js b/packages/random/package.js index 448a18f0b6..a2a3d0e582 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.1-beta.2', + version: '1.2.1-rc.0', }); Package.onUse(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index 717766700c..1d26e65e19 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive dictionary", - version: '1.3.0-beta.2' + version: '1.3.0-rc.0' }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 95a1c5e8ec..13e99f65ff 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.12-beta.2' + version: '1.0.12-rc.0' }); Package.onUse(function (api) { diff --git a/packages/server-render/package.js b/packages/server-render/package.js index a48445c25a..628349b6f2 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "server-render", - version: "0.4.0-beta.2", + version: "0.4.0-rc.0", summary: "Generic support for server-side rendering in Meteor apps", documentation: "README.md" }); diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index 8011eccece..c8e0ec8db1 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Manage the configuration for third-party services', - version: '1.3.0-beta.2', + version: '1.3.0-rc.0', }); Package.onUse(function(api) { diff --git a/packages/session/package.js b/packages/session/package.js index d01f20a09a..f1e006a278 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.1-beta.2' + version: '1.2.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 7c808fe28a..187a13565a 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1-beta.2', + version: '1.3.1-rc.0', documentation: null }); diff --git a/packages/tracker/package.js b/packages/tracker/package.js index 9e121e160b..c98009b0de 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.1-beta.2" + version: "1.2.1-rc.0" }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index f41a001d16..187616cefe 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1-beta.2' + version: '1.3.1-rc.0' }); Package.onUse(function(api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 09cf595668..06492153d1 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.11-beta.2' + version: '1.0.11-rc.0' }); Package.onUse(function (api) { diff --git a/packages/webapp-hashing/package.js b/packages/webapp-hashing/package.js index f4920fe468..f9ced1e9fb 100644 --- a/packages/webapp-hashing/package.js +++ b/packages/webapp-hashing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Used internally by WebApp. Knows how to hash programs from manifests.", - version: '1.1.1-beta.2' + version: '1.1.1-rc.0' }); Package.onUse(function(api) { diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 9b04cc8cac..a9fceaef96 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.13.1-beta.2', + version: '1.13.1-rc.0', }); Npm.depends({ diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 93ccc8d124..e475269aa6 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-beta.2", + "version": "2.8.1-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 06d947dcb9183a5c43434c42d91d19b583c2b0b2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 11:54:29 -0300 Subject: [PATCH 114/292] fix: to not compile static scaffolds --- tools/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 234b36f9bc..88e1ef394b 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,6 +29,7 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**" + "./static-assets/skel*/**", + "./static-assets/scaffolds*/**", ] } From edf4ed4c48cfe4f0137c542413af1980623dbe6b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 14:40:22 -0300 Subject: [PATCH 115/292] docs: updated commandline with the new generate command --- docs/source/commandline.md | 321 +++++++++++++++++++++++++++++++++++++ 1 file changed, 321 insertions(+) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..5dac73737f 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -184,6 +184,327 @@ Create a basic [solid](https://www.solidjs.com/) app. | [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +

meteor generate

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

collection.js

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

methods.js

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

publication.js

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

index.js

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

path option

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

collection.ts

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

methods.ts

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

publications.ts

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

index.ts

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

Using the Wizard

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

Using your own template

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

how do I rename things?

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

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

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

meteor login / logout

Log in and out of your account using Meteor's authentication system. From de8354b960aec0180d93812cc5ed38eeb9ff3fbb Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 14:40:40 -0300 Subject: [PATCH 116/292] added ref to the docs in help.txt for generate command --- tools/cli/help.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 089b5e48a8..a8eaa83e59 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -864,7 +864,8 @@ This is a MeteorJS project command. Options: --help Show help. --path The path to the folder where the files will be generated. Default is the current folder. - --templatePath Path to the template file. + --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. --methods Generate methods. --publications Generate publications. From 2ad403a89e3b079bf16e1ecd0a9dce9a3232e13d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:11:06 -0300 Subject: [PATCH 117/292] fix: updated color.ts --- tools/console/colors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/console/colors.ts b/tools/console/colors.ts index 685888c57d..bb22b5dcc5 100644 --- a/tools/console/colors.ts +++ b/tools/console/colors.ts @@ -5,7 +5,7 @@ const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; -export { +exports.colors = { yellow, red, purple, From 37e0903bd5c5909ea0c521436c13a0263dff6c5b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:11:23 -0300 Subject: [PATCH 118/292] fix: trying to make test pass for cli --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index fb3960f4a8..46fcdcf352 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -20,7 +20,7 @@ const { purple, red, yellow -} = require('../console/colors.ts'); +} = require('../console/colors.ts').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); From 5813cbf12517bc8f17dbc239e5bb91e2a53984ff Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:23 -0300 Subject: [PATCH 119/292] feat: added colors to Console.js --- tools/console/console.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/console/console.js b/tools/console/console.js index 9cad2b5cc1..564d761aab 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,4 +1320,19 @@ class Console extends ConsoleBase { } } +const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; +const red = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple = (text) => `\x1b[35m${ text }\x1b[0m`; +const green = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue = (text) => `\x1b[34m${ text }\x1b[0m`; + +const colors = { + yellow, + red, + purple, + green, + blue, +}; + +exports.colors = colors; exports.Console = new Console; From 7910581017c2fd196dae23f1d79ceef3ed3fbf71 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:39 -0300 Subject: [PATCH 120/292] removed: colors.ts does not pass in tests --- tools/console/colors.ts | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 tools/console/colors.ts diff --git a/tools/console/colors.ts b/tools/console/colors.ts deleted file mode 100644 index bb22b5dcc5..0000000000 --- a/tools/console/colors.ts +++ /dev/null @@ -1,14 +0,0 @@ -type Color = (text: string) => string; -const yellow: Color = (text) => `\x1b[33m${ text }\x1b[0m`; -const red: Color = (text) => `\x1b[31m${ text }\x1b[0m`; -const purple: Color = (text) => `\x1b[35m${ text }\x1b[0m`; -const green: Color = (text) => `\x1b[32m${ text }\x1b[0m`; -const blue: Color = (text) => `\x1b[34m${ text }\x1b[0m`; - -exports.colors = { - yellow, - red, - purple, - green, - blue, -}; From d0f943f6620d03fee38bc1033c0f08342b15c725 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 10 Nov 2022 17:32:54 -0300 Subject: [PATCH 121/292] feat: updated imports for commands.js --- tools/cli/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 46fcdcf352..b95c4908b9 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -20,7 +20,7 @@ const { purple, red, yellow -} = require('../console/colors.ts').colors; +} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); From 0a34bf6cde26c8782c01d824aec90b42a0611040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 11 Nov 2022 13:52:30 +0100 Subject: [PATCH 122/292] Added basic documentation. --- packages/mongo/collection.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 9185e1c13d..d5b99edae4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,10 +319,30 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + /** + * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. + * @locus Anywhere + * @method countDocuments + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ countDocuments(...args) { return this._collection.countDocuments(...args); }, + /** + * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. + * @locus Anywhere + * @method estimatedDocumentCount + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ estimatedDocumentCount(...args) { return this._collection.estimatedDocumentCount(...args); }, From f83f9f8efb5c074b253f2553453400b4afd12187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Fri, 11 Nov 2022 13:52:41 +0100 Subject: [PATCH 123/292] Added atom conversion. --- packages/mongo/mongo_driver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index da21e037e2..9a45966545 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -820,11 +820,13 @@ MongoConnection.prototype.createIndex = function (collectionName, index, }; MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); const collection = this.rawCollection(collectionName); return collection.countDocuments(...args); }; MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); const collection = this.rawCollection(collectionName); return collection.estimatedDocumentCount(...args); }; From e01cef46bc63f48a3ed5d90a22327b194bbb80c6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 11 Nov 2022 11:21:42 -0300 Subject: [PATCH 124/292] docs: added highlights --- docs/history.md | 83 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/docs/history.md b/docs/history.md index 984577f49e..37c7a07fca 100644 --- a/docs/history.md +++ b/docs/history.md @@ -2,16 +2,45 @@ #### Highlights +- modernize tools/run-updater.js by [afrokick](https://github.com/afrokick) +- feat(error message): Especifing error message when cross-boundary by [Grubba27](https://github.com/Grubba27) +- Type definitions for core packages by [piotrpospiech](https://github.com/piotrpospiech) +- Add https proxy support to meteor-installer by [heschong](https://github.com/heschong) +- Fix case insensitive lookup resource overuse by [ToyboxZach](https://github.com/ToyboxZach) +- Update default Facebook API to v15 and fix local changelog by [StorytellerCZ](https://github.com/StorytellerCZ) +- Bump to Node v14.21.0 by [StorytellerCZ](https://github.com/StorytellerCZ) +- Use true mongo binary types by [znewsham](https://github.com/znewsham) +- Add docs for Accounts.registerLoginHandler by [shivam1646](https://github.com/shivam1646) +- Updated MongoDB driver to 4.11 by [radekmie](https://github.com/radekmie) +- Show port in restart message by [harryadel](https://github.com/harryadel) +- The rest of type definitions for core packages by [piotrpospiech](https://github.com/piotrpospiech) +- Removing underscore in packages by [harryadel](https://github.com/harryadel): + - [twitter-oauth] Remove underscore + - [test-in-browser] Remove underscore + - [webapp-hashing] Remove underscore + - [browser-policy] Remove underscore + - [ecmascript] Remove underscore + - [browser-policy-framing] Remove underscore + - [diff-sequence] Remove underscore + - [facts-ui] Remove underscore + - [geojson-utils] Remove underscore + #### Breaking Changes +N/A + #### Migration Steps +_In case you want types in your app using the core packages types/zodern:types (now you do have the option)_ + +1. Remove `@types/meteor` package +2. Install [`zodern:types`](https://github.com/zodern/meteor-types) package +3. Follow [installation guide for the Meteor Apps](https://github.com/zodern/meteor-types#meteor-apps) to update + #### Meteor Version Release * `facebook-oauth@1.12.0` - Updated default version of Facebook GraphAPI to v15 - - ## v2.8, 2022-10-19 #### Highlights @@ -3924,9 +3953,9 @@ N/A > Note: With this version of Reify, `import` declarations are compiled to `module.watch(require(id), ...)` instead of `module.importSync(id, ...)` -or the older `module.import(id, ...)`. The behavior of the compiled code -should be the same as before, but the details seemed different enough to -warrant a note. +> or the older `module.import(id, ...)`. The behavior of the compiled code +> should be the same as before, but the details seemed different enough to +> warrant a note. * The `install` npm package has been upgraded to version 0.10.1. @@ -4270,15 +4299,15 @@ https://github.com/meteor/meteor/commit/0cbd25111d1249a61ca7adce23fad5215408c821 are once again constrained by the current Meteor release. > Before Meteor 1.4, the current release dictated the exact version of -every installed core package, which meant newer core packages could not -be installed without publishing a new Meteor release. In order to -support incremental development of core packages, Meteor 1.4 removed all -release-based constraints on core package versions +> every installed core package, which meant newer core packages could not +> be installed without publishing a new Meteor release. In order to +> support incremental development of core packages, Meteor 1.4 removed all +> release-based constraints on core package versions ([#7084](https://github.com/meteor/meteor/pull/7084)). Now, in Meteor -1.4.3, core package versions must remain patch-compatible with the -versions they had when the Meteor release was published. This middle -ground restores meaning to Meteor releases, yet still permits patch -updates to core packages. +> 1.4.3, core package versions must remain patch-compatible with the +> versions they had when the Meteor release was published. This middle +> ground restores meaning to Meteor releases, yet still permits patch +> updates to core packages. * The `cordova-lib` npm package has been updated to 6.4.0, along with cordova-android (6.1.1) and cordova-ios (4.3.0), and various plugins. @@ -4368,11 +4397,11 @@ updates to core packages. change was deemed too significant for this release. > Note: The decision to revert the above change was made late in the -Meteor 1.4.2.4 release process, before it was ever recommended but too -late in the process to avoid the additional increment of the version number. -See [#8311](https://github.com/meteor/meteor/pull/8311) for additional -information. This change will still be released in an upcoming version -of Meteor with a more seamless upgrade. +> Meteor 1.4.2.4 release process, before it was ever recommended but too +> late in the process to avoid the additional increment of the version number. +> See [#8311](https://github.com/meteor/meteor/pull/8311) for additional +> information. This change will still be released in an upcoming version +> of Meteor with a more seamless upgrade. ## v1.4.2.4, 2017-02-02 @@ -4381,7 +4410,7 @@ of Meteor with a more seamless upgrade. * The `npm` npm package has been upgraded from version 3.10.9 to 4.1.2. > Note: This change was later deemed too substantial for a point release -and was reverted in Meteor 1.4.2.7. +> and was reverted in Meteor 1.4.2.7. * Fix for [Issue #8136](https://github.com/meteor/meteor/issues/8136). @@ -4408,9 +4437,9 @@ and was reverted in Meteor 1.4.2.7. > Note: Meteor 1.4.2.2 was finalized before [#8045](https://github.com/meteor/meteor/pull/8045) was merged, but -those changes were [deemed important +> those changes were [deemed important enough](https://github.com/meteor/meteor/pull/8044#issuecomment-260913739) -to skip recommending 1.4.2.2 and instead immediately release 1.4.2.3. +> to skip recommending 1.4.2.2 and instead immediately release 1.4.2.3. ## v1.4.2.2, 2016-11-15 @@ -4497,10 +4526,10 @@ to skip recommending 1.4.2.2 and instead immediately release 1.4.2.3. See https://github.com/meteor/meteor/pull/7668 for more details. > Note: the `METEOR_PROFILE` environment variable now provides data for -server startup time as well as build time, which should make it easier -to tell which of your packages are responsible for slow startup times. -Please include the output of `METEOR_PROFILE=10 meteor run` with any -GitHub issue about rebuild performance. +> server startup time as well as build time, which should make it easier +> to tell which of your packages are responsible for slow startup times. +> Please include the output of `METEOR_PROFILE=10 meteor run` with any +> GitHub issue about rebuild performance. * `npm` has been upgraded to version 3.10.9. @@ -5077,8 +5106,8 @@ GitHub issue about rebuild performance. ## v1.3.2.4, 2016-04-20 > Meteor 1.3.2.4 was published because publishing 1.3.2.3 failed in an -unrecoverable way. Meteor 1.3.2.4 contains no additional changes beyond -the changes in 1.3.2.3. +> unrecoverable way. Meteor 1.3.2.4 contains no additional changes beyond +> the changes in 1.3.2.3. ## v1.3.2.3, 2016-04-20 From 35024bf7309914b6d527dae150d617e9e6b34909 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 11 Nov 2022 11:48:32 -0300 Subject: [PATCH 125/292] docs: wip on history.md --- docs/history.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/history.md b/docs/history.md index 37c7a07fca..4ba3fe9f91 100644 --- a/docs/history.md +++ b/docs/history.md @@ -13,6 +13,7 @@ - Add docs for Accounts.registerLoginHandler by [shivam1646](https://github.com/shivam1646) - Updated MongoDB driver to 4.11 by [radekmie](https://github.com/radekmie) - Show port in restart message by [harryadel](https://github.com/harryadel) +- In the client, don't wait if the stub doesn't return a promise by [denihs](https://github.com/denihs) - The rest of type definitions for core packages by [piotrpospiech](https://github.com/piotrpospiech) - Removing underscore in packages by [harryadel](https://github.com/harryadel): - [twitter-oauth] Remove underscore @@ -38,6 +39,31 @@ _In case you want types in your app using the core packages types/zodern:types ( 3. Follow [installation guide for the Meteor Apps](https://github.com/zodern/meteor-types#meteor-apps) to update #### Meteor Version Release + +* `accounts-base@2.2.5` + - added types for package. +* `browser-policy@1.1.1` + - adjusted package tests. +* `browser-policy-common@1.0.12` + - added types for package. +* `browser-policy-framing@1.1.1` + - removed underscore. +* `check@1.3.2` + - added types for package. +* `ddp@1.4.0` + - added types for package. +* `ddp-client@2.6.1` + - In the client, don't wait if the stub doesn't return a promise. +* `ddp-rate-limiter@1.1.1` + - added types for package. +* `diff-sequence@1.1.2` + - removed underscore. +* `ecmascript@0.16.3` + - removed underscore. +* `ejson@1.1.3` + - added types for package. +* `ejson@2.2.2` + - added types for package. * `facebook-oauth@1.12.0` - Updated default version of Facebook GraphAPI to v15 From e56cb57afa17d55b28aa6a853a44acd5595010cc Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 11 Nov 2022 16:32:10 -0300 Subject: [PATCH 126/292] docs: finished listing packages --- docs/history.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/history.md b/docs/history.md index 4ba3fe9f91..25b02c6213 100644 --- a/docs/history.md +++ b/docs/history.md @@ -66,6 +66,53 @@ _In case you want types in your app using the core packages types/zodern:types ( - added types for package. * `facebook-oauth@1.12.0` - Updated default version of Facebook GraphAPI to v15 +* `facts-ui@1.0.1` + - removed underscore. +* `fetch@0.1.2` + - added types for package. +* `geojson-utils@1.0.11` + - removed underscore. +* `hot-module-replacement@0.5.2` + - added types for package. +* `meteor@1.10.2` + - added types for package. +* `modern-browsers@0.1.9` + - added types for package. +* `modules-runtime@0.13.2` + - added accurate error messages. +* `modules-runtime-hot@0.14.1` + - added accurate error messages. +* `mongo@1.16.1` + - added types for package. + - added true mongo binary +* `npm-mongo@4.11.0` + - updated npm mongo version to match npm one. +* `promise@0.13.0` + - added types for package. +* `random@1.2.1` + - added types for package. +* `reactive-dict@1.3.1` + - added types for package. +* `reactive-dict@1.0.12` + - added types for package. +* `server-render@0.4.1` + - added types for package. +* `service-configuration@1.3.1` + - added types for package. +* `session@1.2.1` + - added types for package. +* `test-in-browser@1.3.1` + - removed underscore. +* `tracker@1.2.1` + - added types for package. +* `twitter-oauth@1.3.1` + - removed underscore. +* `underscore@1.0.11` + - added types for package. +* `webapp@1.13.2` + - added types for package. +* `webapp-hashing@1.1.1` + - added types for package. ## v2.8, 2022-10-19 From 3f3b929d1b18cf9e7df0301a9cbf4bb3f59c792b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 11 Nov 2022 17:08:04 -0300 Subject: [PATCH 127/292] docs: added adding core types section --- docs/_config.yml | 1 + docs/source/using-core-types.md | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 docs/source/using-core-types.md diff --git a/docs/_config.yml b/docs/_config.yml index 78db90b0a2..7a70499147 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -86,6 +86,7 @@ sidebar_categories: Command Line: - commandline - environment-variables + - using-core-types Troubleshooting: - expired-certificate - windows diff --git a/docs/source/using-core-types.md b/docs/source/using-core-types.md new file mode 100644 index 0000000000..89ac1636af --- /dev/null +++ b/docs/source/using-core-types.md @@ -0,0 +1,39 @@ +--- +title: Using Core Types +description: Using core types with zodern:types +--- + +For MeteorJS in its version 2.8.1 we have introduced to our core packages an integration with the [zodern:types](https://github.com/zodern/meteor-types) package. +This package allows you to use the TypeScript types for the Meteor core packages in your TypeScript code or JavaScript code. +in order to use the types you need to install the package by running the command: + +```bash +meteor add zodern:types +``` + +And add the following line to your `tsconfig.json` file (if you do not have one, create one and add the code bellow): + +```json +{ + "compilerOptions": { + "preserveSymlinks": true, + "paths": { + "meteor/*": [ + "node_modules/@types/meteor/*", + ".meteor/local/types/packages.d.ts" + ] + } + } +} +``` + +then run the command: + +```bash +meteor lint +``` + +this will create a file within your .meteor folder that will have your types for the core packages. +You can continue to use your code as you did before, but now you can use the types for the core packages even if you are in JavaScript. + +for more information about the package please visit the [zodern:types](https://github.com/zodern/meteor-types). From 36d64af64d97d4fe2c238a26aa3015f64b812aa7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 14 Nov 2022 08:20:31 -0300 Subject: [PATCH 128/292] Meteor version to 2.8.1 :comet: --- npm-packages/meteor-installer/package.json | 2 +- packages/accounts-base/package.js | 2 +- packages/browser-policy-common/package.js | 2 +- packages/browser-policy-framing/package.js | 2 +- packages/browser-policy/package.js | 2 +- packages/check/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ddp-rate-limiter/package.js | 2 +- packages/ddp/package.js | 2 +- packages/deprecated/jshint/.versions | 8 ++++---- packages/diff-sequence/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/ejson/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/facts-ui/package.js | 2 +- packages/fetch/package.js | 2 +- packages/geojson-utils/package.js | 2 +- packages/hot-module-replacement/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/modern-browsers/package.js | 2 +- packages/modules-runtime-hot/package.js | 2 +- packages/modules-runtime/package.js | 2 +- packages/mongo/package.js | 2 +- packages/non-core/less/.versions | 10 +++++----- packages/npm-mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/random/package.js | 2 +- packages/reactive-dict/package.js | 2 +- packages/reactive-var/package.js | 2 +- packages/server-render/package.js | 2 +- packages/service-configuration/package.js | 2 +- packages/session/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tracker/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/underscore/package.js | 2 +- packages/webapp-hashing/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 41 files changed, 48 insertions(+), 48 deletions(-) diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index d7a6b90863..34f8eb8224 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.0", + "version": "2.8.1", "description": "Install Meteor", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 7077a6fee6..90f03e6b50 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5-rc.0', + version: '2.2.5', }); Package.onUse(api => { diff --git a/packages/browser-policy-common/package.js b/packages/browser-policy-common/package.js index 6c14aefb43..d3a1888984 100644 --- a/packages/browser-policy-common/package.js +++ b/packages/browser-policy-common/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for browser-policy packages", - version: "1.0.11-rc.0" + version: "1.0.12" }); Package.onUse(function (api) { diff --git a/packages/browser-policy-framing/package.js b/packages/browser-policy-framing/package.js index 6ccaea89b5..1135346dd5 100644 --- a/packages/browser-policy-framing/package.js +++ b/packages/browser-policy-framing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Restrict which websites can frame your app", - version: '1.1.1-rc.0' + version: '1.1.1' }); Package.onUse(function (api) { diff --git a/packages/browser-policy/package.js b/packages/browser-policy/package.js index ea68128e8b..bbab788e76 100644 --- a/packages/browser-policy/package.js +++ b/packages/browser-policy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Configure security policies enforced by the browser", - version: '1.1.1-rc.0' + version: '1.1.1' }); Package.onUse(function (api) { diff --git a/packages/check/package.js b/packages/check/package.js index de01eab25b..7505e58b51 100644 --- a/packages/check/package.js +++ b/packages/check/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Check whether a value matches a pattern', - version: '1.3.2-rc.0', + version: '1.3.2', }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 8c3a48db98..5a0b31737f 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.1-rc.0', + version: '2.6.1', documentation: null }); diff --git a/packages/ddp-rate-limiter/package.js b/packages/ddp-rate-limiter/package.js index 06f3991082..c39e26c462 100644 --- a/packages/ddp-rate-limiter/package.js +++ b/packages/ddp-rate-limiter/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ddp-rate-limiter', - version: '1.1.0-rc.0', + version: '1.1.1', // Brief, one-line summary of the package. summary: 'The DDPRateLimiter allows users to add rate limits to DDP' + ' methods and subscriptions.', diff --git a/packages/ddp/package.js b/packages/ddp/package.js index 1f33786986..bf92eed179 100644 --- a/packages/ddp/package.js +++ b/packages/ddp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data framework", - version: '1.4.0-rc.0' + version: '1.4.1' }); Package.onUse(function (api) { diff --git a/packages/deprecated/jshint/.versions b/packages/deprecated/jshint/.versions index e29bb428bd..2560991c2d 100644 --- a/packages/deprecated/jshint/.versions +++ b/packages/deprecated/jshint/.versions @@ -5,7 +5,7 @@ base64@1.0.12 binary-heap@1.0.11 boilerplate-generator@1.7.1 callback-hook@1.3.0 -check@1.3.2-rc.0 +check@1.3.2 ddp@1.4.0 ddp-client@2.4.1 ddp-common@1.4.0 @@ -36,14 +36,14 @@ mongo-id@1.0.8 npm-mongo@3.9.0 ordered-dict@1.1.0 promise@0.11.2 -random@1.2.1-rc.0 +random@1.2.1 react-fast-refresh@0.1.1 reload@1.3.1 retry@1.1.0 routepolicy@1.1.0 socket-stream-client@0.3.3 tinytest@1.1.0 -tracker@1.2.1-rc.0 -underscore@1.0.11-rc.0 +tracker@1.2.1 +underscore@1.0.11 webapp@1.10.1 webapp-hashing@1.1.0 diff --git a/packages/diff-sequence/package.js b/packages/diff-sequence/package.js index 063b7b0fbe..8c63436265 100644 --- a/packages/diff-sequence/package.js +++ b/packages/diff-sequence/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "An implementation of a diff algorithm on arrays and objects.", - version: '1.1.2-rc.0', + version: '1.1.2', documentation: null }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 18dc04f858..adb2b73436 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3-rc.0', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 2a1edd9b94..8003d75acf 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.1.3-rc.0' + version: '1.1.3' }); Package.onUse(function onUse(api) { diff --git a/packages/email/package.js b/packages/email/package.js index 6b486b0c40..326bad392a 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.1-rc.0', + version: '2.2.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 0b74b97cab..5df363643a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1-rc.0' + version: '1.11.1' }); Package.onUse(api => { diff --git a/packages/facts-ui/package.js b/packages/facts-ui/package.js index f0ef32f5bf..4a40b24089 100644 --- a/packages/facts-ui/package.js +++ b/packages/facts-ui/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Display internal app statistics", - version: '1.0.1-rc.0' + version: '1.0.1' }); Package.onUse(function (api) { diff --git a/packages/fetch/package.js b/packages/fetch/package.js index a54555be07..5648235dac 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "fetch", - version: '0.1.2-rc.0', + version: '0.1.2', summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); diff --git a/packages/geojson-utils/package.js b/packages/geojson-utils/package.js index 156ba4c54b..4dc3e82de0 100644 --- a/packages/geojson-utils/package.js +++ b/packages/geojson-utils/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GeoJSON utility functions (from https://github.com/maxogden/geojson-js-utils)', - version: '1.0.11-rc.0' + version: '1.0.11' }); Package.onUse(function (api) { diff --git a/packages/hot-module-replacement/package.js b/packages/hot-module-replacement/package.js index b269173f92..c3f3e3c3af 100644 --- a/packages/hot-module-replacement/package.js +++ b/packages/hot-module-replacement/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'hot-module-replacement', - version: '0.5.1-rc.0', + version: '0.5.2', summary: 'Update code in development without reloading the page', documentation: 'README.md', debugOnly: true, diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 70b5c56a00..b28bbf6643 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1-rc.0', + version: '2.8.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 9e63b16844..930478dc07 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.1-rc.0' + version: '1.10.2' }); Package.registerBuildPlugin({ diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index 98dc758315..7ca4b6d41c 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modern-browsers', - version: '0.1.8-rc.0', + version: '0.1.9', summary: 'API for defining the boundary between modern and legacy ' + 'JavaScript clients', diff --git a/packages/modules-runtime-hot/package.js b/packages/modules-runtime-hot/package.js index b22e874a96..2ba683b96d 100644 --- a/packages/modules-runtime-hot/package.js +++ b/packages/modules-runtime-hot/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'modules-runtime-hot', - version: '0.14.1-rc.0', + version: '0.14.1', summary: 'Patches modules-runtime to support Hot Module Replacement', git: 'https://github.com/benjamn/install', documentation: 'README.md', diff --git a/packages/modules-runtime/package.js b/packages/modules-runtime/package.js index 046d129f60..4e124aaacb 100644 --- a/packages/modules-runtime/package.js +++ b/packages/modules-runtime/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules-runtime", - version: '0.13.2-rc.0', + version: '0.13.1', summary: "CommonJS module system", git: "https://github.com/benjamn/install", documentation: "README.md" diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ba7744a1ca..31ef5d4b77 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1-rc.0' + version: '1.16.1' }); Npm.depends({ diff --git a/packages/non-core/less/.versions b/packages/non-core/less/.versions index fee8b829eb..703024e52f 100644 --- a/packages/non-core/less/.versions +++ b/packages/non-core/less/.versions @@ -7,7 +7,7 @@ blaze@2.3.4 boilerplate-generator@1.7.1 caching-compiler@1.2.2 callback-hook@1.3.1 -check@1.3.2-rc.0 +check@1.3.2 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -40,16 +40,16 @@ npm-mongo@3.9.0 observe-sequence@1.0.19 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.1-rc.0 +random@1.2.1 react-fast-refresh@0.1.1 -reactive-var@1.0.12-rc.0 +reactive-var@1.0.12 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 socket-stream-client@0.4.0 test-helpers@1.2.0 tinytest@1.1.1 -tracker@1.2.1-rc.0 -underscore@1.0.11-rc.0 +tracker@1.2.1 +underscore@1.0.11 webapp@1.11.1 webapp-hashing@1.1.0 diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 3f4f649765..63696bf272 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0-rc.0', + version: '4.11.0', documentation: null }); diff --git a/packages/promise/package.js b/packages/promise/package.js index 8737ce08f7..181ef21b3b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.0-rc.0", + version: "0.12.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/random/package.js b/packages/random/package.js index a2a3d0e582..f6d9b6aae9 100644 --- a/packages/random/package.js +++ b/packages/random/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Random number generator and utilities', - version: '1.2.1-rc.0', + version: '1.2.1', }); Package.onUse(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index 1d26e65e19..9fe4681c54 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive dictionary", - version: '1.3.0-rc.0' + version: '1.3.1' }); Package.onUse(function (api) { diff --git a/packages/reactive-var/package.js b/packages/reactive-var/package.js index 13e99f65ff..05d1b1a194 100644 --- a/packages/reactive-var/package.js +++ b/packages/reactive-var/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reactive variable", - version: '1.0.12-rc.0' + version: '1.0.12' }); Package.onUse(function (api) { diff --git a/packages/server-render/package.js b/packages/server-render/package.js index 628349b6f2..01be2f4b65 100644 --- a/packages/server-render/package.js +++ b/packages/server-render/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "server-render", - version: "0.4.0-rc.0", + version: "0.4.1", summary: "Generic support for server-side rendering in Meteor apps", documentation: "README.md" }); diff --git a/packages/service-configuration/package.js b/packages/service-configuration/package.js index c8e0ec8db1..a3042eb333 100644 --- a/packages/service-configuration/package.js +++ b/packages/service-configuration/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Manage the configuration for third-party services', - version: '1.3.0-rc.0', + version: '1.3.1', }); Package.onUse(function(api) { diff --git a/packages/session/package.js b/packages/session/package.js index f1e006a278..30f5529638 100644 --- a/packages/session/package.js +++ b/packages/session/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Session variable", - version: '1.2.1-rc.0' + version: '1.2.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 187a13565a..a090172f76 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1-rc.0', + version: '1.3.1', documentation: null }); diff --git a/packages/tracker/package.js b/packages/tracker/package.js index c98009b0de..4448d88383 100644 --- a/packages/tracker/package.js +++ b/packages/tracker/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Dependency tracker to allow reactive callbacks", - version: "1.2.1-rc.0" + version: "1.2.1" }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 187616cefe..6a8bd6793b 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1-rc.0' + version: '1.3.1' }); Package.onUse(function(api) { diff --git a/packages/underscore/package.js b/packages/underscore/package.js index 06492153d1..58525754ed 100644 --- a/packages/underscore/package.js +++ b/packages/underscore/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Collection of small helpers: _.map, _.each, ...", - version: '1.0.11-rc.0' + version: '1.0.11' }); Package.onUse(function (api) { diff --git a/packages/webapp-hashing/package.js b/packages/webapp-hashing/package.js index f9ced1e9fb..12e2eac59c 100644 --- a/packages/webapp-hashing/package.js +++ b/packages/webapp-hashing/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Used internally by WebApp. Knows how to hash programs from manifests.", - version: '1.1.1-rc.0' + version: '1.1.1' }); Package.onUse(function(api) { diff --git a/packages/webapp/package.js b/packages/webapp/package.js index a9fceaef96..56e920fea2 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.13.1-rc.0', + version: '1.13.2', }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 41230791aa..b49fccf05e 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.0", + "version": "2.8.1", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 69de5f9862b21befd8035ce0b0a4cbb3f8cdc393 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:43:18 -0300 Subject: [PATCH 129/292] add vue-2 and vue-3 to cli --- tools/cli/commands.js | 4 +++- tools/cli/help.txt | 5 +++-- tools/static-assets/README.md | 8 ++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..b225c2b15d 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -533,6 +533,7 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, + 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, @@ -905,7 +906,8 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue-based app"); + cmd("meteor create --vue # to create a basic Vue3-based app"); + cmd("meteor create --vue-2 # to create a basic Vue2-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 8091e7b025..391866e70d 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,7 +183,8 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue-based app. + --vue Create a basic vue3-based app. + --vue-2 Create a basic vue2-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index db232e18af..1884abb1d6 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,6 +40,14 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. +## skel-vue - Package Skeleton + +Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. + +## skel-vue-2 - Package Skeleton + +Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. + ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on From 416cbe32db193f21b4aa3599cd6eb56888185c3b Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:44:37 -0300 Subject: [PATCH 130/292] update vue-2 folder --- tools/static-assets/{skel-vue => skel-vue-2}/.gitignore | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/.gitignore | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/packages | 0 tools/static-assets/{skel-vue => skel-vue-2}/.meteor/platforms | 0 tools/static-assets/{skel-vue => skel-vue-2}/client/main.html | 0 tools/static-assets/{skel-vue => skel-vue-2}/client/main.js | 0 .../{skel-vue => skel-vue-2}/imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../{skel-vue => skel-vue-2}/imports/api/fixtures.js | 0 .../{skel-vue => skel-vue-2}/imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../{skel-vue => skel-vue-2}/imports/api/methods/index.js | 0 .../{skel-vue => skel-vue-2}/imports/api/publications/index.js | 0 .../{skel-vue => skel-vue-2}/imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/App.vue | 0 .../{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue | 0 .../{skel-vue => skel-vue-2}/imports/ui/components/Info.vue | 0 .../static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/package.json | 0 tools/static-assets/{skel-vue => skel-vue-2}/server/main.js | 0 tools/static-assets/{skel-vue => skel-vue-2}/tests/main.js | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename tools/static-assets/{skel-vue => skel-vue-2}/.gitignore (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/.gitignore (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/packages (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/.meteor/platforms (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/client/main.html (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/client/main.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/fixtures.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/App.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Info.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/package.json (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/server/main.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/tests/main.js (100%) diff --git a/tools/static-assets/skel-vue/.gitignore b/tools/static-assets/skel-vue-2/.gitignore similarity index 100% rename from tools/static-assets/skel-vue/.gitignore rename to tools/static-assets/skel-vue-2/.gitignore diff --git a/tools/static-assets/skel-vue/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore similarity index 100% rename from tools/static-assets/skel-vue/.meteor/.gitignore rename to tools/static-assets/skel-vue-2/.meteor/.gitignore diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages similarity index 100% rename from tools/static-assets/skel-vue/.meteor/packages rename to tools/static-assets/skel-vue-2/.meteor/packages diff --git a/tools/static-assets/skel-vue/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms similarity index 100% rename from tools/static-assets/skel-vue/.meteor/platforms rename to tools/static-assets/skel-vue-2/.meteor/platforms diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue-2/client/main.html similarity index 100% rename from tools/static-assets/skel-vue/client/main.html rename to tools/static-assets/skel-vue-2/client/main.html diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue-2/client/main.js similarity index 100% rename from tools/static-assets/skel-vue/client/main.js rename to tools/static-assets/skel-vue-2/client/main.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/fixtures.js b/tools/static-assets/skel-vue-2/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/fixtures.js rename to tools/static-assets/skel-vue-2/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/index.js b/tools/static-assets/skel-vue-2/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/index.js rename to tools/static-assets/skel-vue-2/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/index.js b/tools/static-assets/skel-vue-2/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/index.js rename to tools/static-assets/skel-vue-2/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/App.vue rename to tools/static-assets/skel-vue-2/imports/ui/App.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Info.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/plugins.js b/tools/static-assets/skel-vue-2/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/plugins.js rename to tools/static-assets/skel-vue-2/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue-2/package.json similarity index 100% rename from tools/static-assets/skel-vue/package.json rename to tools/static-assets/skel-vue-2/package.json diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue-2/server/main.js similarity index 100% rename from tools/static-assets/skel-vue/server/main.js rename to tools/static-assets/skel-vue-2/server/main.js diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js similarity index 100% rename from tools/static-assets/skel-vue/tests/main.js rename to tools/static-assets/skel-vue-2/tests/main.js From e5a25952f685a5dabdbbcb03f6d02d262b407efc Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 11:48:09 -0300 Subject: [PATCH 131/292] add vue-3 skel folder --- tools/static-assets/skel-vue/.gitignore | 1 + .../skel-vue/.meteor/.finished-upgraders | 19 +++++ .../static-assets/skel-vue/.meteor/.gitignore | 1 + tools/static-assets/skel-vue/.meteor/.id | 7 ++ tools/static-assets/skel-vue/.meteor/packages | 21 ++++++ .../static-assets/skel-vue/.meteor/platforms | 2 + tools/static-assets/skel-vue/.meteor/release | 1 + tools/static-assets/skel-vue/.meteor/versions | 71 +++++++++++++++++++ tools/static-assets/skel-vue/README.md | 19 +++++ tools/static-assets/skel-vue/client/main.css | 3 + tools/static-assets/skel-vue/client/main.html | 16 +++++ tools/static-assets/skel-vue/client/main.js | 1 + .../skel-vue/imports/api/links.js | 10 +++ .../skel-vue/imports/ui/About.vue | 5 ++ .../static-assets/skel-vue/imports/ui/App.vue | 10 +++ .../skel-vue/imports/ui/AppMenu.vue | 6 ++ .../skel-vue/imports/ui/Hello.vue | 16 +++++ .../skel-vue/imports/ui/Home.vue | 10 +++ .../skel-vue/imports/ui/Info.vue | 16 +++++ .../static-assets/skel-vue/imports/ui/main.js | 13 ++++ .../skel-vue/imports/ui/router.js | 18 +++++ tools/static-assets/skel-vue/package.json | 33 +++++++++ .../static-assets/skel-vue/postcss.config.js | 6 ++ tools/static-assets/skel-vue/server/main.js | 31 ++++++++ .../static-assets/skel-vue/tailwind.config.js | 8 +++ tools/static-assets/skel-vue/tests/main.js | 20 ++++++ tools/static-assets/skel-vue/vite.config.js | 12 ++++ 27 files changed, 376 insertions(+) create mode 100644 tools/static-assets/skel-vue/.gitignore create mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders create mode 100644 tools/static-assets/skel-vue/.meteor/.gitignore create mode 100644 tools/static-assets/skel-vue/.meteor/.id create mode 100644 tools/static-assets/skel-vue/.meteor/packages create mode 100644 tools/static-assets/skel-vue/.meteor/platforms create mode 100644 tools/static-assets/skel-vue/.meteor/release create mode 100644 tools/static-assets/skel-vue/.meteor/versions create mode 100644 tools/static-assets/skel-vue/README.md create mode 100644 tools/static-assets/skel-vue/client/main.css create mode 100644 tools/static-assets/skel-vue/client/main.html create mode 100644 tools/static-assets/skel-vue/client/main.js create mode 100644 tools/static-assets/skel-vue/imports/api/links.js create mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/App.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/main.js create mode 100644 tools/static-assets/skel-vue/imports/ui/router.js create mode 100644 tools/static-assets/skel-vue/package.json create mode 100644 tools/static-assets/skel-vue/postcss.config.js create mode 100644 tools/static-assets/skel-vue/server/main.js create mode 100644 tools/static-assets/skel-vue/tailwind.config.js create mode 100644 tools/static-assets/skel-vue/tests/main.js create mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/tools/static-assets/skel-vue/.gitignore b/tools/static-assets/skel-vue/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-vue/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.gitignore b/tools/static-assets/skel-vue/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id new file mode 100644 index 0000000000..dd363b2513 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages new file mode 100644 index 0000000000..2565a5fe32 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -0,0 +1,21 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base@1.5.1 # Packages every Meteor app needs to have +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.16.0 # The database Meteor supports right now +reactive-var@1.0.11 # Reactive variable for tracker + +standard-minifier-css@1.8.2 # CSS minifier run for production mode +standard-minifier-js@2.8.1 # JS minifier run for production mode +es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers +ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code +typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules +shell-server@0.5.0 # Server-side component of the `meteor shell` command +hot-module-replacement@0.5.1 # Update client in development without reloading the page + +static-html@1.3.2 # Define static page content in .html files +vite:bundler diff --git a/tools/static-assets/skel-vue/.meteor/platforms b/tools/static-assets/skel-vue/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release new file mode 100644 index 0000000000..1d2a6d0f79 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/release @@ -0,0 +1 @@ +METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions new file mode 100644 index 0000000000..3b89f7359b --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/versions @@ -0,0 +1,71 @@ +allow-deny@1.1.1 +autoupdate@1.8.0 +babel-compiler@7.9.2 +babel-runtime@1.5.1 +base64@1.0.12 +binary-heap@1.0.11 +blaze-tools@1.1.3 +boilerplate-generator@1.7.1 +caching-compiler@1.2.2 +caching-html-compiler@1.2.1 +callback-hook@1.4.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.6.0 +ddp-common@1.4.0 +ddp-server@2.6.0 +diff-sequence@1.1.1 +dynamic-import@0.7.2 +ecmascript@0.16.2 +ecmascript-runtime@0.8.0 +ecmascript-runtime-client@0.12.1 +ecmascript-runtime-server@0.11.0 +ejson@1.1.2 +es5-shim@4.8.0 +fetch@0.1.1 +geojson-utils@1.0.10 +hot-code-push@1.0.4 +hot-module-replacement@0.5.1 +html-tools@1.1.3 +htmljs@1.1.1 +id-map@1.1.1 +inter-process-messaging@0.1.1 +launch-screen@1.3.0 +logging@1.3.1 +meteor@1.10.1 +meteor-base@1.5.1 +minifier-css@1.6.1 +minifier-js@2.7.5 +minimongo@1.9.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.8 +modules@0.19.0 +modules-runtime@0.13.0 +modules-runtime-hot@0.14.0 +mongo@1.16.0 +mongo-decimal@0.1.3 +mongo-dev-server@1.1.0 +mongo-id@1.0.8 +npm-mongo@4.9.0 +ordered-dict@1.1.0 +promise@0.12.0 +random@1.2.0 +react-fast-refresh@0.2.3 +reactive-var@1.0.11 +reload@1.3.1 +retry@1.1.0 +routepolicy@1.1.1 +shell-server@0.5.0 +socket-stream-client@0.5.0 +spacebars-compiler@1.3.1 +standard-minifier-css@1.8.2 +standard-minifier-js@2.8.1 +static-html@1.3.2 +templating-tools@1.2.2 +tracker@1.2.0 +typescript@4.5.4 +underscore@1.0.10 +vite:bundler@0.1.9 +webapp@1.13.1 +webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md new file mode 100644 index 0000000000..7ba6226cb0 --- /dev/null +++ b/tools/static-assets/skel-vue/README.md @@ -0,0 +1,19 @@ +# Meteor + Vue3 + Vite + +This is a simple example of how to use Vue3 with Meteor. + +## How to use + +1. Clone this repo +2. Run `meteor npm install` +3. Run `meteor` +4. Open `http://localhost:3000` in your browser + +## Libraries used + +- [Vue3](https://v3.vuejs.org/) +- [Vite](https://vitejs.dev/) +- [Vue Router](https://next.router.vuejs.org/) +- [Meteor](https://www.meteor.com/) +- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) +- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html new file mode 100644 index 0000000000..9e2393399c --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.html @@ -0,0 +1,16 @@ + + ~name~ + + + + + + + + + +
+ diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js new file mode 100644 index 0000000000..97d382a9bd --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.js @@ -0,0 +1 @@ +// main entry point is in imports/ui/main.jsx diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js new file mode 100644 index 0000000000..4e98fcca62 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/links.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor' +import { Mongo } from 'meteor/mongo' + +export const LinksCollection = new Mongo.Collection('links') + +if (Meteor.isServer) { + Meteor.publish('links', function () { + return LinksCollection.find({}) + }) +} diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue new file mode 100644 index 0000000000..d1ba384f1b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/About.vue @@ -0,0 +1,5 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue new file mode 100644 index 0000000000..7a775391cb --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue new file mode 100644 index 0000000000..5b1997efec --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue @@ -0,0 +1,6 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue new file mode 100644 index 0000000000..ebe691f4d2 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Hello.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue new file mode 100644 index 0000000000..0473845661 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Home.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue new file mode 100644 index 0000000000..5a17339c53 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Info.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js new file mode 100644 index 0000000000..e3500841ea --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/main.js @@ -0,0 +1,13 @@ +import { Meteor } from 'meteor/meteor' +import { createApp } from 'vue' +import { VueMeteor } from 'vue-meteor-tracker' + +import App from './App.vue' +import { router } from './router' + +Meteor.startup(() => { + const app = createApp(App) + app.use(router) + app.use(VueMeteor) + app.mount('#app') +}) diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js new file mode 100644 index 0000000000..7768ef4894 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/router.js @@ -0,0 +1,18 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Home from './Home.vue' + +export const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'home', + component: Home, + }, + { + path: '/about', + name: 'about', + component: () => import('./About.vue'), + }, + ], +}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json new file mode 100644 index 0000000000..f8dc1cace8 --- /dev/null +++ b/tools/static-assets/skel-vue/package.json @@ -0,0 +1,33 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "build": "meteor build ../output/vue --directory", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.17.9", + "meteor-node-stubs": "^1.2.1", + "vue": "^3.2.45", + "vue-meteor-tracker": "^3.0.0-beta.7", + "vue-router": "^4.1.6" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + }, + "devDependencies": { + "@types/meteor": "^2.8.1", + "@vitejs/plugin-vue": "^3.2.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.19", + "tailwindcss": "^3.2.4", + "vite": "^3.2.3" + } +} diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js new file mode 100644 index 0000000000..33ad091d26 --- /dev/null +++ b/tools/static-assets/skel-vue/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js new file mode 100644 index 0000000000..44f7bc045b --- /dev/null +++ b/tools/static-assets/skel-vue/server/main.js @@ -0,0 +1,31 @@ +import { Meteor } from 'meteor/meteor' +import { LinksCollection } from '/imports/api/links' + +async function insertLink({ title, url }) { + await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) +} + +Meteor.startup(async () => { + // If the Links collection is empty, add some data. + if ((await LinksCollection.find().countAsync()) === 0) { + await insertLink({ + title: 'Do the Tutorial', + url: 'https://www.solidjs.com/tutorial/introduction_basics', + }) + + await insertLink({ + title: 'Follow the Guide', + url: 'https://guide.meteor.com', + }) + + await insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com', + }) + + await insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com', + }) + } +}) diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js new file mode 100644 index 0000000000..72c950fc84 --- /dev/null +++ b/tools/static-assets/skel-vue/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js new file mode 100644 index 0000000000..086819d896 --- /dev/null +++ b/tools/static-assets/skel-vue/tests/main.js @@ -0,0 +1,20 @@ +import assert from 'assert' + +describe('vue-skeleton', function () { + it('package.json has correct name', async function () { + const { name } = await import('../package.json') + assert.strictEqual(name, 'vue-skeleton') + }) + + if (Meteor.isClient) { + it('client is not server', function () { + assert.strictEqual(Meteor.isServer, false) + }) + } + + if (Meteor.isServer) { + it('server is not client', function () { + assert.strictEqual(Meteor.isClient, false) + }) + } +}) diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js new file mode 100644 index 0000000000..d3aeaa9aba --- /dev/null +++ b/tools/static-assets/skel-vue/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + meteor: { + clientEntry: 'imports/ui/main.js', + }, + optimizeDeps: { + exclude: ['vue-meteor-tracker'], + }, +}) From 399e7213af0f1b2062e3fbec2747df3c203375c8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:02:25 -0300 Subject: [PATCH 132/292] fix: addressed fred comments on publication.js scaffold --- tools/static-assets/scaffolds-js/publications.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js index c9f61c4533..bafaa5702c 100644 --- a/tools/static-assets/scaffolds-js/publications.js +++ b/tools/static-assets/scaffolds-js/publications.js @@ -1,9 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId() { - return $$PascalName$$Collection.find({ userId: this.userId }); -}); Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); From 2bf4f8093882185db1f6409b79ed37b607644901 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Mon, 14 Nov 2022 14:02:35 -0300 Subject: [PATCH 133/292] ipdate commandline docs --- docs/source/commandline.md | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..cf67522956 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,7 +129,13 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) +Create a basic [Vue 3](https://vuejs.org/) app. + +`--react` + +`--vue-2` + +Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) for more information. `--svelte` @@ -146,35 +152,35 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [solid](https://www.solidjs.com/) app. +Create a basic [Solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:| +| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:|:---------:| | [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | | [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | | [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | | [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | | [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | @@ -183,6 +189,7 @@ Create a basic [solid](https://www.solidjs.com/) app. | [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X |

meteor login / logout

From 8b26690d8001e6133704f5a3e578e3c0717d826a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:02:46 -0300 Subject: [PATCH 134/292] fix: addressed fred comments on publication.ts scaffold --- tools/static-assets/scaffolds-ts/publications.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index 6b6e7b6b24..0b97d79d6f 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,9 +1,6 @@ import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; -Meteor.publish('$$PascalName$$sByLoggedUser', function publish$$PascalName$$sByUserId(this: Subscription) { - return $$PascalName$$Collection.find({ userId: this.userId }); -}); Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); From a914c079156eac4d67ec26086fc34535d6c4cb68 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:03:15 -0300 Subject: [PATCH 135/292] fix: adjusted publication-js scaffold spacing --- tools/static-assets/scaffolds-js/publications.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js index bafaa5702c..7e3a996634 100644 --- a/tools/static-assets/scaffolds-js/publications.js +++ b/tools/static-assets/scaffolds-js/publications.js @@ -1,7 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; - Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 6b9071fe6019518d53a26b8515c9047a319ea165 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:03:45 -0300 Subject: [PATCH 136/292] fix: adjusted spacing in publication.ts --- tools/static-assets/scaffolds-ts/publications.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts index 0b97d79d6f..818932bba3 100644 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -1,7 +1,6 @@ import { Meteor, Subscription } from 'meteor/meteor'; import { $$PascalName$$Collection } from './collection'; - Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { return $$PascalName$$Collection.find({}); }); From 9cd95dc67a746a89f1dd3bc33356c9e8c1595f7d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 14 Nov 2022 20:19:08 -0300 Subject: [PATCH 137/292] fix: docs date --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 25b02c6213..5295d1e9be 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,4 +1,4 @@ -## 2.8.1, Unreleased +## 2.8.1, 2022-11-14 #### Highlights From 7c6c9c1a43746d91b9b8342e11bcf656ce17e666 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 14 Nov 2022 20:19:25 -0300 Subject: [PATCH 138/292] fix: adjusted docs typo --- docs/history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 5295d1e9be..724ece077c 100644 --- a/docs/history.md +++ b/docs/history.md @@ -8,7 +8,7 @@ - Add https proxy support to meteor-installer by [heschong](https://github.com/heschong) - Fix case insensitive lookup resource overuse by [ToyboxZach](https://github.com/ToyboxZach) - Update default Facebook API to v15 and fix local changelog by [StorytellerCZ](https://github.com/StorytellerCZ) -- Bump to Node v14.21.0 by [StorytellerCZ](https://github.com/StorytellerCZ) +- Bump to Node v14.21.1 by [StorytellerCZ](https://github.com/StorytellerCZ) - Use true mongo binary types by [znewsham](https://github.com/znewsham) - Add docs for Accounts.registerLoginHandler by [shivam1646](https://github.com/shivam1646) - Updated MongoDB driver to 4.11 by [radekmie](https://github.com/radekmie) From b6af49e5855f9c820ec1874cc68269eed6330c4f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 14 Nov 2022 20:19:39 -0300 Subject: [PATCH 139/292] fix: revert on packages versions --- tools/tests/apps/app-config/.meteor/versions | 4 ++-- tools/tests/apps/client-refresh/.meteor/versions | 2 +- .../compiler-plugin-static-html-error/.meteor/versions | 6 +++--- .../apps/compiler-plugin-static-html/.meteor/versions | 6 +++--- tools/tests/apps/custom-minifier/.meteor/versions | 6 +++--- tools/tests/apps/dynamic-import/.meteor/packages | 6 +++--- .../tests/apps/ecmascript-regression/.meteor/packages | 2 +- .../tests/apps/ecmascript-regression/.meteor/versions | 10 +++++----- tools/tests/apps/git-commit-hash/.meteor/versions | 4 ++-- .../apps/link-config-npm-package/.meteor/versions | 4 ++-- .../apps/linked-external-npm-package/.meteor/versions | 4 ++-- tools/tests/apps/meteor-ignore/.meteor/versions | 4 ++-- tools/tests/apps/modules/.meteor/packages | 6 +++--- tools/tests/apps/standard-app/.meteor/versions | 6 +++--- 14 files changed, 35 insertions(+), 35 deletions(-) diff --git a/tools/tests/apps/app-config/.meteor/versions b/tools/tests/apps/app-config/.meteor/versions index 741cf5b27c..e53282cd8f 100644 --- a/tools/tests/apps/app-config/.meteor/versions +++ b/tools/tests/apps/app-config/.meteor/versions @@ -57,8 +57,8 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.3.2 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 url@1.2.0 webapp@1.5.0 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/client-refresh/.meteor/versions b/tools/tests/apps/client-refresh/.meteor/versions index dfd474adf1..eef8816483 100644 --- a/tools/tests/apps/client-refresh/.meteor/versions +++ b/tools/tests/apps/client-refresh/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.2-beta.1 +check@1.3.2 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 diff --git a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions index c0e1bc65a8..ea9c18baf2 100644 --- a/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html-error/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.2-beta.1 +check@1.3.2 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ standard-minifier-css@1.5.3 standard-minifier-js@2.4.1 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions index c0e1bc65a8..ea9c18baf2 100644 --- a/tools/tests/apps/compiler-plugin-static-html/.meteor/versions +++ b/tools/tests/apps/compiler-plugin-static-html/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.1.0 -check@1.3.2-beta.1 +check@1.3.2 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ standard-minifier-css@1.5.3 standard-minifier-js@2.4.1 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.4 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/custom-minifier/.meteor/versions b/tools/tests/apps/custom-minifier/.meteor/versions index 6f55d66e80..99e0fc7d2b 100644 --- a/tools/tests/apps/custom-minifier/.meteor/versions +++ b/tools/tests/apps/custom-minifier/.meteor/versions @@ -7,7 +7,7 @@ boilerplate-generator@1.6.0 caching-compiler@1.2.1 caching-html-compiler@1.1.3 callback-hook@1.2.0 -check@1.3.2-beta.1 +check@1.3.2 custom-minifier@0.0.1 ddp@1.4.0 ddp-client@2.3.3 @@ -45,7 +45,7 @@ socket-stream-client@0.2.2 spacebars-compiler@1.1.3 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.5 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index e75977188d..1570f6c394 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -8,8 +8,8 @@ meteor-base@1.4.0 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.9.0 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views -reactive-var@1.0.12-beta.1 # Reactive variable for tracker -tracker@1.2.1-beta.1 # Meteor's client-side reactive programming library +reactive-var@1.0.12 # Reactive variable for tracker +tracker@1.2.1 # Meteor's client-side reactive programming library standard-minifier-css@1.6.0 # CSS minifier run for production mode standard-minifier-js@2.6.0 # JS minifier run for production mode @@ -23,6 +23,6 @@ dynamic-import@0.5.1 lazy-test-package helper-package user:colon-name -underscore@1.0.11-beta.1 +underscore@1.0.11 fetch@0.1.1 jquery diff --git a/tools/tests/apps/ecmascript-regression/.meteor/packages b/tools/tests/apps/ecmascript-regression/.meteor/packages index 5dc670f631..59cfdb5807 100644 --- a/tools/tests/apps/ecmascript-regression/.meteor/packages +++ b/tools/tests/apps/ecmascript-regression/.meteor/packages @@ -7,7 +7,7 @@ meteor-base@1.5.1 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.13.0 # The database Meteor supports right now -reactive-var@1.0.12-beta.1 # Reactive variable for tracker +reactive-var@1.0.12 # Reactive variable for tracker standard-minifier-css@1.7.4 # CSS minifier run for production mode standard-minifier-js@2.7.0 # JS minifier run for production mode diff --git a/tools/tests/apps/ecmascript-regression/.meteor/versions b/tools/tests/apps/ecmascript-regression/.meteor/versions index 697b4d7acc..d5985967e1 100644 --- a/tools/tests/apps/ecmascript-regression/.meteor/versions +++ b/tools/tests/apps/ecmascript-regression/.meteor/versions @@ -10,7 +10,7 @@ boilerplate-generator@1.7.1 caching-compiler@1.2.2 caching-html-compiler@1.2.1 callback-hook@1.4.0 -check@1.3.2-beta.1 +check@1.3.2 ddp@1.4.0 ddp-client@2.5.0 ddp-common@1.4.0 @@ -56,10 +56,10 @@ mongo-id@1.0.8 npm-mongo@3.9.1 ordered-dict@1.1.0 promise@0.12.0 -random@1.2.1-beta.1 +random@1.2.1 react-fast-refresh@0.1.1 react-meteor-data@2.3.3 -reactive-var@1.0.12-beta.1 +reactive-var@1.0.12 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 @@ -70,9 +70,9 @@ standard-minifier-css@1.7.4 standard-minifier-js@2.7.1 static-html@1.3.2 templating-tools@1.2.1 -tracker@1.2.1-beta.1 +tracker@1.2.1 typescript@4.3.5 -underscore@1.0.11-beta.1 +underscore@1.0.11 url@1.3.2 webapp@1.12.0 webapp-hashing@1.1.0 diff --git a/tools/tests/apps/git-commit-hash/.meteor/versions b/tools/tests/apps/git-commit-hash/.meteor/versions index fb9d3c8a07..91b9af05b0 100644 --- a/tools/tests/apps/git-commit-hash/.meteor/versions +++ b/tools/tests/apps/git-commit-hash/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.3-beta181.16 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/link-config-npm-package/.meteor/versions b/tools/tests/apps/link-config-npm-package/.meteor/versions index 4df92e6329..38888c802f 100644 --- a/tools/tests/apps/link-config-npm-package/.meteor/versions +++ b/tools/tests/apps/link-config-npm-package/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.4.0-rc171.6 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.0-rc171.6 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/linked-external-npm-package/.meteor/versions b/tools/tests/apps/linked-external-npm-package/.meteor/versions index 4df92e6329..38888c802f 100644 --- a/tools/tests/apps/linked-external-npm-package/.meteor/versions +++ b/tools/tests/apps/linked-external-npm-package/.meteor/versions @@ -33,7 +33,7 @@ standard-minifier-css@1.4.1 standard-minifier-js@2.4.0-rc171.6 static-html@1.2.2 templating-tools@1.1.2 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.0-rc171.6 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/meteor-ignore/.meteor/versions b/tools/tests/apps/meteor-ignore/.meteor/versions index d0550519a5..22056f661d 100644 --- a/tools/tests/apps/meteor-ignore/.meteor/versions +++ b/tools/tests/apps/meteor-ignore/.meteor/versions @@ -47,7 +47,7 @@ npm-mongo@2.2.30 ordered-dict@1.0.9 promise@0.9.0 random@1.0.10 -reactive-var@1.0.12-beta.1 +reactive-var@1.0.12 reload@1.1.11 retry@1.0.9 routepolicy@1.0.12 @@ -58,7 +58,7 @@ standard-minifier-js@2.1.1 static-html@1.2.2 templating-tools@1.1.2 tracker@1.1.3 -underscore@1.0.11-beta.1 +underscore@1.0.11 url@1.1.0 webapp@1.3.19 webapp-hashing@1.0.9 diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index a8cbf16ab4..f139c0b7a7 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -8,9 +8,9 @@ meteor-base@1.4.0 # Packages every Meteor app needs to have mobile-experience@1.1.0 # Packages for a great mobile UX mongo@1.9.0 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views -session@1.2.1-beta.1 # Client-side reactive dictionary for your app +session@1.2.1 # Client-side reactive dictionary for your app jquery # Helpful client-side library -tracker@1.2.1-beta.1 # Meteor's client-side reactive programming library +tracker@1.2.1 # Meteor's client-side reactive programming library es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers. ecmascript@0.14.2 # Enable ECMAScript2015+ syntax in app code @@ -23,7 +23,7 @@ client-only-ecmascript modules-test-plugin shell-server@0.5.0 dynamic-import@0.5.1 -underscore@1.0.11-beta.1 +underscore@1.0.11 import-local-json-module akryum:vue-component dummy-compiler diff --git a/tools/tests/apps/standard-app/.meteor/versions b/tools/tests/apps/standard-app/.meteor/versions index 563d1ca0f3..521ac34984 100644 --- a/tools/tests/apps/standard-app/.meteor/versions +++ b/tools/tests/apps/standard-app/.meteor/versions @@ -6,7 +6,7 @@ base64@1.0.11 binary-heap@1.0.11 boilerplate-generator@1.6.0 callback-hook@1.1.0 -check@1.3.2-beta.1 +check@1.3.2 ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 @@ -49,7 +49,7 @@ shell-server@0.4.0 socket-stream-client@0.2.2 standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 -tracker@1.2.1-beta.1 -underscore@1.0.11-beta.1 +tracker@1.2.1 +underscore@1.0.11 webapp@1.7.2 webapp-hashing@1.0.9 From 54db6162e1883fd6ae1bd1d5a57cf717362db362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Miernik?= Date: Tue, 15 Nov 2022 08:40:48 +0100 Subject: [PATCH 140/292] Deprecated Cursor#count. --- packages/minimongo/cursor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 72a51cd67b..0c119a8f81 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,7 +39,11 @@ export default class Cursor { } /** - * @summary Returns the number of documents that match a query. + * @deprecated in 2.9 + * @summary Returns the number of documents that match a query. This method is + * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); + * see `Collection.countDocuments` and + * `Collection.estimatedDocumentCount` for a replacement. * @memberOf Mongo.Cursor * @method count * @instance From 65488015fda736ebde2aa3a7c20eb18a49ab0dc5 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 15 Nov 2022 10:14:38 +0100 Subject: [PATCH 141/292] Update package.js onTest --- packages/package-version-parser/package.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 118b9c3f11..5150ec6023 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -14,7 +14,6 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use('package-version-parser'); - api.use(['tinytest']); + api.use(['package-version-parser', 'tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); From 59664f9cbc535e0023ebabb02ce27a66aadcf210 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 16 Nov 2022 09:45:12 -0300 Subject: [PATCH 142/292] chore: bump version in sintaller --- npm-packages/meteor-installer/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 9b13c21c20..676cf07665 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.0'; +const METEOR_LATEST_VERSION = '2.8.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; From 5c552cc26ee0cd6321bc701b3d87e77ad70f82ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 17 Nov 2022 11:42:42 +0100 Subject: [PATCH 143/292] updated types from DefinitelyTyped --- packages/meteor/meteor.d.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index 0a482c0aa9..eb08d994bd 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,12 +147,19 @@ export namespace Meteor { }): void; /** - * Invokes a method passing any number of arguments. + * Invokes a method with a sync stub, passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; + /** + * Invokes a method with an async stub, passing any number of arguments. + * @param name Name of method to invoke + * @param args Optional method arguments + */ + function callAsync(name: string, ...args: any[]): Promise; + function apply< Result extends | EJSONable @@ -434,7 +441,14 @@ export namespace Meteor { */ function publish( name: string | null, - func: (this: Subscription, ...args: any[]) => void, + func: ( + this: Subscription, + ...args: any[] + ) => + | void + | Mongo.Cursor + | Mongo.Cursor[] + | Promise | Mongo.Cursor[]>, options?: { is_auto: boolean } ): void; From cbe7b1cf9e0237e3dd5d1b9640918f6f061834fa Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 17 Nov 2022 12:53:49 -0300 Subject: [PATCH 144/292] chore:updated npm package --- npm-packages/meteor-installer/README.md | 1 + npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index b240fe71b2..0fb3ca6f33 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,6 +14,7 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| +| 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | | 2.7.4 | 2.7.3 | diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 9b13c21c20..676cf07665 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.0'; +const METEOR_LATEST_VERSION = '2.8.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index d7a6b90863..34f8eb8224 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.0", + "version": "2.8.1", "description": "Install Meteor", "main": "install.js", "scripts": { From 6c06c2c3eb80a833e228c7c0e485ad8df8343635 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 17 Nov 2022 12:54:03 -0300 Subject: [PATCH 145/292] Revert "chore:updated npm package" This reverts commit cbe7b1cf9e0237e3dd5d1b9640918f6f061834fa. --- npm-packages/meteor-installer/README.md | 1 - npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index 0fb3ca6f33..b240fe71b2 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,7 +14,6 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| -| 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | | 2.7.4 | 2.7.3 | diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..9b13c21c20 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.8.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 34f8eb8224..d7a6b90863 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.1", + "version": "2.8.0", "description": "Install Meteor", "main": "install.js", "scripts": { From 309feef7887c0b06cede1d5c8b9fb6c762a158c3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 17 Nov 2022 12:54:36 -0300 Subject: [PATCH 146/292] chore: updated meteor deps --- npm-packages/meteor-installer/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index b240fe71b2..0fb3ca6f33 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,6 +14,7 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| +| 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | | 2.7.4 | 2.7.3 | From f4c3418594caa571b8d83b7a1a30bbd09a1b5fae Mon Sep 17 00:00:00 2001 From: Matheus Castro Date: Thu, 17 Nov 2022 18:41:21 -0300 Subject: [PATCH 147/292] No need to run tests without Fibers for now. --- .circleci/config.yml | 3 ++- .travis.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 91e4525564..8636ec1b63 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -116,7 +116,8 @@ set_fibers_env: &set_fibers_env matrix_for_fibers: &matrix_for_fibers matrix: parameters: - fibers: [true, false] + # If we want to run with Fibers and without, just append false here. + fibers: [true] jobs: diff --git a/.travis.yml b/.travis.yml index d3f1d88c1d..35e4e9f859 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,8 @@ env: - phantom=false - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium jobs: - - DISABLE_FIBERS=1 + # We don't want to run the tests without fibers anymore. + # - DISABLE_FIBERS=1 # Use a different flag, since node would use false as a string. - FIBERS_ENABLED=1 addons: From 6896a927f9d19132d29cfc7a2a29a0c3913a27a3 Mon Sep 17 00:00:00 2001 From: afrokick Date: Fri, 18 Nov 2022 15:39:10 +0300 Subject: [PATCH 148/292] fix deps lazy require for proxy --- npm-packages/meteor-installer/install.js | 3 ++- npm-packages/meteor-installer/package.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/npm-packages/meteor-installer/install.js b/npm-packages/meteor-installer/install.js index 6f52bfb93b..c0d75f0d84 100644 --- a/npm-packages/meteor-installer/install.js +++ b/npm-packages/meteor-installer/install.js @@ -1,5 +1,4 @@ const { DownloaderHelper } = require('node-downloader-helper'); -const HttpsProxyAgent = require('https-proxy-agent'); const cliProgress = require('cli-progress'); const Seven = require('node-7z'); const path = require('path'); @@ -150,6 +149,8 @@ function generateProxyAgent() { return undefined; } + const HttpsProxyAgent = require('https-proxy-agent'); + return new HttpsProxyAgent(proxyUrl); } diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 34f8eb8224..7aee7a53bc 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -11,6 +11,7 @@ "dependencies": { "7zip-bin": "^5.2.0", "cli-progress": "^3.11.1", + "https-proxy-agent": "^5.0.1", "node-7z": "^2.1.2", "node-downloader-helper": "^1.0.19", "rimraf": "^3.0.2", From 172e81b89442017ed7166fac695f2808ca6d13cb Mon Sep 17 00:00:00 2001 From: denihs Date: Fri, 18 Nov 2022 16:59:58 -0400 Subject: [PATCH 149/292] New version for meteor-installer --- npm-packages/meteor-installer/README.md | 3 ++- npm-packages/meteor-installer/package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/README.md b/npm-packages/meteor-installer/README.md index 0fb3ca6f33..91ad13de8f 100644 --- a/npm-packages/meteor-installer/README.md +++ b/npm-packages/meteor-installer/README.md @@ -14,6 +14,7 @@ npm install -g meteor | NPM Package | Meteor Official Release | |-------------|-------------------------| +| 2.8.2 | 2.8.1 | | 2.8.1 | 2.8.1 | | 2.8.0 | 2.8.0 | | 2.7.5 | 2.7.3 | @@ -62,4 +63,4 @@ npm install -g meteor --ignore-meteor-setup-exec-path ### Proxy configuration Setting the `https_proxy` or `HTTPS_PROXY` environment variable to a valid proxy URL will cause the -downloader to use the configured proxy to retrieve the Meteor files. \ No newline at end of file +downloader to use the configured proxy to retrieve the Meteor files. diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 7aee7a53bc..8afbd9c39e 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.1", + "version": "2.8.2", "description": "Install Meteor", "main": "install.js", "scripts": { From d944665433594404c8736a2d2faf87aabe80dbc0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:37:37 -0300 Subject: [PATCH 150/292] Meteor version to 2.9.0-beta.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 0c8277250b..c766053caa 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5', + version: '2.2.6-beta.0', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f346b8a1e4..303eaba06f 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.1", + version: "1.4.2-beta.0", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c4f9cadbd3..8369f947f5 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.1', + version: '2.3.2-beta.0', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 32515319fb..8dc67a4309 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.9.1-beta.0' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 326bad392a..b9fa55fd6c 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.2', + version: '2.2.3-beta.0', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 49b688e641..28a637989d 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1' + version: '1.11.2-beta.0' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index de8e9415cb..7cefb18217 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.0' + version: '1.4.1-beta.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 102f60b0ac..5c996e4d25 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.2", + version: "1.4.3-beta.0", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9691528e9f..b6b06917f2 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.1' + version: '1.1.2-beta.0' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index db38232d52..fb9a5e08cf 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.1' + version: '1.3.2-beta.0' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index b28bbf6643..e12de90ccd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1', + version: '2.9.0-beta.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 860c0cf168..7c520d5f9f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.2' + version: '1.10.3-beta.0' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 057a6f2104..4d7a7655d3 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.1' + version: '1.6.2-beta.0' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 3b8e47fb2f..8d21df2279 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.0' + version: '1.9.1-beta.0' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..d539e5dd78 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2-beta.0' }); Npm.depends({ diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 421be1d506..1a578a6672 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.2" + version: "2.1.3-beta.0" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index bb07c66774..ba53f1e367 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.0", + version: "1.5.1-beta.0", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index c5f2fd0917..54c6f79f91 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.1", + version: "1.3.2-beta.0", }); Package.onUse(api => { diff --git a/packages/promise/package.js b/packages/promise/package.js index 181ef21b3b..a63b92ce8c 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.1", + version: "0.12.2-beta.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 97e0d8f3eb..a8a25af974 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.2', + version: '1.8.3-beta.0', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..91fd073439 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.1-beta.0' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index a090172f76..5269ad01b7 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1', + version: '1.3.2-beta.0', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 862749494b..6bcaf11427 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.1' + version: '1.2.2-beta.0' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 6a8bd6793b..883c484b2e 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1' + version: '1.3.2-beta.0' }); Package.onUse(function(api) { diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9ce2620c89..da5746eaac 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.1", + version: "1.3.2-beta.0", }); Package.onUse(api => { From 681f6e3c814d598f30394ae7ccf16c939528d64c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:49:46 -0300 Subject: [PATCH 151/292] Meteor version to 2.9.0-beta.0 :comet: --- scripts/admin/meteor-release-experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e475269aa6..cbebb7dc99 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-rc.0", + "version": "2.9.0-beta.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 436f6fd4d4dd7ba764c9d4c779d6149679ebaa8d Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:52:33 +0300 Subject: [PATCH 152/292] apply ESLint rules --- npm-packages/eslint-config-meteor/index.js | 32 ++++++++-------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/npm-packages/eslint-config-meteor/index.js b/npm-packages/eslint-config-meteor/index.js index 5e71e32103..3c191d2ebc 100644 --- a/npm-packages/eslint-config-meteor/index.js +++ b/npm-packages/eslint-config-meteor/index.js @@ -1,21 +1,16 @@ module.exports = { parser: 'babel-eslint', parserOptions: { - allowImportExportEverywhere: true + allowImportExportEverywhere: true, }, env: { node: true, - browser: true + browser: true, }, - plugins: [ - 'meteor' - ], - extends: [ - 'airbnb', - 'plugin:meteor/recommended' - ], + plugins: ['meteor'], + extends: ['airbnb', 'plugin:meteor/recommended'], settings: { - 'import/resolver': 'meteor' + 'import/resolver': 'meteor', }, rules: { 'react/jsx-filename-extension': 0, @@ -30,24 +25,21 @@ module.exports = { 'no-underscore-dangle': [ 'error', { - allow: [ - '_id', - '_ensureIndex' - ] - } + allow: ['_id', '_ensureIndex'], + }, ], 'object-shorthand': [ 'error', 'always', { - avoidQuotes: false - } + avoidQuotes: false, + }, ], 'space-before-function-paren': 0, - + // for Meteor API's that rely on `this` context, e.g. Template.onCreated and publications 'func-names': 0, - 'prefer-arrow-callback': 0 - } + 'prefer-arrow-callback': 0, + }, }; From c25ae39cc7e63889b557cca8abcdf42119a74e3e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 11:54:57 -0300 Subject: [PATCH 153/292] Meteor version to 2.9.0-beta.1 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index c766053caa..b707f589a2 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-beta.0', + version: '2.2.6-beta.1', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 303eaba06f..cb23dbd2ad 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-beta.0", + version: "1.4.2-beta.1", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 8369f947f5..cccb4f7dd5 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-beta.0', + version: '2.3.2-beta.1', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 8dc67a4309..379d2c0c2b 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.1-beta.0' + version: '7.9.1-beta.1' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index b9fa55fd6c..c61c9c5b73 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-beta.0', + version: '2.2.3-beta.1', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 28a637989d..a5277d5090 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-beta.0' + version: '1.11.2-beta.1' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 7cefb18217..404779adbc 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-beta.0' + version: '1.4.1-beta.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 5c996e4d25..8b50f77029 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-beta.0", + version: "1.4.3-beta.1", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index b6b06917f2..f8af313b72 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-beta.0' + version: '1.1.2-beta.1' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index fb9a5e08cf..984b6bfb0b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-beta.0' + version: '1.3.2-beta.1' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index e12de90ccd..50aa8cd5f0 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-beta.0', + version: '2.9.0-beta.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7c520d5f9f..9513d32ec7 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-beta.0' + version: '1.10.3-beta.1' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 4d7a7655d3..f2b43c5d99 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-beta.0' + version: '1.6.2-beta.1' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 8d21df2279..b65eef1f20 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-beta.0' + version: '1.9.1-beta.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index d539e5dd78..ec1b8855f9 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-beta.0' + version: '1.16.2-beta.1' }); Npm.depends({ diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 1a578a6672..f048a7052f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-beta.0" + version: "2.1.3-beta.1" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index ba53f1e367..f103a140f8 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-beta.0", + version: "1.5.1-beta.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 54c6f79f91..4461057e41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-beta.0", + version: "1.3.2-beta.1", }); Package.onUse(api => { diff --git a/packages/promise/package.js b/packages/promise/package.js index a63b92ce8c..d5e9589a34 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-beta.0", + version: "0.12.2-beta.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index a8a25af974..02118cdbe7 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-beta.0', + version: '1.8.3-beta.1', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 91fd073439..63c1dfc334 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-beta.0' + version: '1.3.1-beta.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 5269ad01b7..1a302849c0 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-beta.0', + version: '1.3.2-beta.1', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 6bcaf11427..9b978369a3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-beta.0' + version: '1.2.2-beta.1' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 883c484b2e..aff292bc4e 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-beta.0' + version: '1.3.2-beta.1' }); Package.onUse(function(api) { diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index da5746eaac..96466043f5 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-beta.0", + version: "1.3.2-beta.1", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index cbebb7dc99..240846fd90 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-beta.0", + "version": "2.9.0-beta.1", "recommended": false, "official": false, "description": "Meteor experimental release" From 7f1e920d7b578eb29ef2b050d132ac12deadb316 Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:56:36 +0300 Subject: [PATCH 154/292] update links --- npm-packages/eslint-config-meteor/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/eslint-config-meteor/package.json b/npm-packages/eslint-config-meteor/package.json index faff59b2ad..6b1d62defe 100644 --- a/npm-packages/eslint-config-meteor/package.json +++ b/npm-packages/eslint-config-meteor/package.json @@ -8,14 +8,14 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/meteor/eslint-config-meteor.git" + "url": "git+https://github.com/meteor/meteor.git" }, "author": "David Burles", "license": "MIT", "bugs": { - "url": "https://github.com/meteor/eslint-config-meteor/issues" + "url": "https://github.com/meteor/meteor/issues" }, - "homepage": "https://github.com/meteor/eslint-config-meteor#readme", + "homepage": "https://github.com/meteor/meteor/tree/devel/npm-packages/eslint-config-meteor#readme", "peerDependencies": { "babel-eslint": ">= 7", "eslint": ">= 3", From 2e8c5d06a5a798ae51f4ac93ad7d04d29387a64b Mon Sep 17 00:00:00 2001 From: afrokick Date: Mon, 21 Nov 2022 17:57:23 +0300 Subject: [PATCH 155/292] update readme --- npm-packages/eslint-config-meteor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-config-meteor/README.md b/npm-packages/eslint-config-meteor/README.md index 27c8ba5595..046c174268 100644 --- a/npm-packages/eslint-config-meteor/README.md +++ b/npm-packages/eslint-config-meteor/README.md @@ -1,4 +1,4 @@ -# eslint-config-meteor +# @meteorjs/eslint-config-meteor This is an [ESLint](https://eslint.org) configuration for [Meteor](https://www.meteor.com) apps which implements the recommendations from the [Meteor Guide](https://guide.meteor.com/)'s section on [Code style](https://guide.meteor.com/code-style.html#eslint). From 4abe0d6c01050ccf34b887eae42bee53de78d5b0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 21 Nov 2022 12:03:12 -0300 Subject: [PATCH 156/292] chore: updated release logger to better understadn what is happening --- tools/cli/commands-packages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 2c8f3ff4e2..6a5c4d071c 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - + Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { From 2238df20acdff05251b6e99df87abdc8a7d3c6b0 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 23 Nov 2022 20:02:23 -0400 Subject: [PATCH 157/292] Running dpp-sever tests without Fibers --- .../common/livedata_connection.js | 41 ++++++++----- .../livedata_server_async_tests.js | 10 +++- .../ddp-server-async/livedata_server_tests.js | 60 +++++++++++-------- packages/meteor/dynamics_nodejs.js | 9 +++ 4 files changed, 79 insertions(+), 41 deletions(-) diff --git a/packages/ddp-client-async/common/livedata_connection.js b/packages/ddp-client-async/common/livedata_connection.js index c30ff6f48d..1855a0e0f5 100644 --- a/packages/ddp-client-async/common/livedata_connection.js +++ b/packages/ddp-client-async/common/livedata_connection.js @@ -606,14 +606,12 @@ export class Connection { DDP._CurrentMethodInvocation._set(); DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(true); return new Promise((resolve, reject) => { - this.applyAsync(name, args, { isFromCallAsync: true }, (err, result) => { - DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); - if (err) { - reject(err); - return; - } - resolve(result); - }); + this.applyAsync(name, args, { isFromCallAsync: true }) + .then(result => { + DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); + resolve(result); + }) + .catch(reject); }); } @@ -669,9 +667,8 @@ export class Connection { * @param {Boolean} options.noRetry (Client only) if true, don't send this method again on reload, simply call the callback an error with the error code 'invocation-failed'. * @param {Boolean} options.throwStubExceptions (Client only) If true, exceptions thrown by method stubs will be thrown instead of logged, and the method will not be invoked on the server. * @param {Boolean} options.returnStubValue (Client only) If true then in cases where we would have otherwise discarded the stub's return value and returned undefined, instead we go ahead and return it. Specifically, this is any time other than when (a) we are already inside a stub or (b) we are in Node and no callback was provided. Currently we require this flag to be explicitly passed to reduce the likelihood that stub return values will be confused with server return values; we may improve this in future. - * @param {Function} [asyncCallback] Optional callback. */ - async applyAsync(name, args, options, callback) { + async applyAsync(name, args, options) { const { stubInvocation, invocation, ...stubOptions } = this._stubCall(name, EJSON.clone(args), options); if (stubOptions.hasStub) { if ( @@ -703,7 +700,7 @@ export class Connection { stubOptions.exception = e; } } - return this._apply(name, stubOptions, args, options, callback); + return this._apply(name, stubOptions, args, options, null); } _apply(name, stubCallValue, args, options, callback) { @@ -803,8 +800,24 @@ export class Connection { } else { // On the server, make the function synchronous. Throw on // errors, return on success. - future = new Future(); - callback = future.resolver(); + // TODO fibers: before this was a future, now it's a promise. + // Do more tests around this. + + if (!options.isFromCallAsync) { + throw new Error("Can't create a future for Meteor.call()"); + } + + future = new Promise((resolve, reject) => { + callback = (...allArgs) => { + let args = Array.from(allArgs); + let err = args.shift(); + if (err) { + reject(err); + return; + } + resolve(...args); + } + }); } } @@ -849,7 +862,7 @@ export class Connection { // If we're using the default callback on the server, // block waiting for the result. if (future) { - return future.wait(); + return future; } return options.returnStubValue ? stubReturnValue : undefined; } diff --git a/packages/ddp-server-async/livedata_server_async_tests.js b/packages/ddp-server-async/livedata_server_async_tests.js index d145aeee92..ca00cc338b 100644 --- a/packages/ddp-server-async/livedata_server_async_tests.js +++ b/packages/ddp-server-async/livedata_server_async_tests.js @@ -23,6 +23,8 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); +// console.log('methodInvocation', methodInvocation); +// console.log('publicationInvocation', !!publicationInvocation); // Check the publish function's environment variables and context. if (callback) { callback.call(this, methodInvocation, publicationInvocation); @@ -33,6 +35,12 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); + // console.log('onStopMethodInvocation', onStopMethodInvocation); + + + console.log('onStopPublicationInvocation', !!onStopPublicationInvocation, this.userId); + + callback.call( this, onStopMethodInvocation, @@ -45,7 +53,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.stop(); } else { this.ready(); - Meteor.call('livedata_server_test_setuserid', userId); + await Meteor.callAsync('livedata_server_test_setuserid', userId); } }); diff --git a/packages/ddp-server-async/livedata_server_tests.js b/packages/ddp-server-async/livedata_server_tests.js index cde56b6196..0e7c970b12 100644 --- a/packages/ddp-server-async/livedata_server_tests.js +++ b/packages/ddp-server-async/livedata_server_tests.js @@ -87,8 +87,8 @@ Meteor.methods({ return this.connection && this.connection.id; }, - livedata_server_test_outer: function () { - return Meteor.call('livedata_server_test_inner'); + livedata_server_test_outer: async function () { + return await Meteor.callAsync('livedata_server_test_inner'); }, livedata_server_test_setuserid: function (userId) { @@ -108,12 +108,17 @@ Tinytest.addAsync( }); makeTestConnection( - test, - function (clientConn, serverConn) { - clientConn.call('livedata_server_test_inner'); - clientConn.disconnect(); - }, - onComplete + test, + function(clientConn, serverConn) { + clientConn + .callAsync('livedata_server_test_inner') + .then(() => clientConn.disconnect()) + .catch(e => { + onComplete(); + throw new Meteor.Error(e); + }); + }, + onComplete ); } ); @@ -125,10 +130,11 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - var res = clientConn.call('livedata_server_test_inner'); - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); + clientConn.callAsync('livedata_server_test_inner').then(res => { + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); + }); }, onComplete ); @@ -142,10 +148,11 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - var res = clientConn.call('livedata_server_test_outer'); - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); + clientConn.callAsync('livedata_server_test_outer').then(res => { + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); + }); }, onComplete ); @@ -163,10 +170,10 @@ Meteor.publish("livedata_server_test_sub", function (connectionId) { this.stop(); }); -Meteor.publish("livedata_server_test_sub_method", function (connectionId) { +Meteor.publish("livedata_server_test_sub_method", async function (connectionId) { var callback = onSubscription[connectionId]; if (callback) { - var id = Meteor.call('livedata_server_test_inner'); + var id = await Meteor.callAsync('livedata_server_test_inner'); callback(id); } this.stop(); @@ -311,13 +318,13 @@ Tinytest.addAsync( ); Meteor.methods({ - testResolvedPromise(arg) { - const invocation1 = DDP._CurrentMethodInvocation.get(); + async testResolvedPromise(arg) { + const invocationRunningFromCallAsync1 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); return Promise.resolve(arg).then(result => { - const invocation2 = DDP._CurrentMethodInvocation.get(); - // This equality holds because Promise callbacks are bound to the - // dynamic environment where .then was called. - if (invocation1 !== invocation2) { + const invocationRunningFromCallAsync2 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); + // What matters here is that both invocations are coming from the same call, + // so both of them can be considered a simulation. + if (invocationRunningFromCallAsync1 !== invocationRunningFromCallAsync2) { throw new Meteor.Error("invocation mismatch"); } return result + " after waiting"; @@ -344,9 +351,10 @@ Meteor.methods({ Tinytest.addAsync( "livedata server - waiting for Promise", - (test, onComplete) => makeTestConnection(test, (clientConn, serverConn) => { + (test, onComplete) => makeTestConnection(test, async (clientConn, serverConn) => { + const testResolvedPromiseResult = await clientConn.callAsync("testResolvedPromise", "clientConn.call"); test.equal( - clientConn.call("testResolvedPromise", "clientConn.call"), + testResolvedPromiseResult, "clientConn.call after waiting" ); diff --git a/packages/meteor/dynamics_nodejs.js b/packages/meteor/dynamics_nodejs.js index 2a278acd5e..0d8ba74727 100644 --- a/packages/meteor/dynamics_nodejs.js +++ b/packages/meteor/dynamics_nodejs.js @@ -3,6 +3,7 @@ var Fiber = Meteor._isFibersEnabled && Npm.require('fibers'); let nextSlot = 0; +let callAsyncMethodRunning = false; Meteor._nodeCodeMustBeInFiber = function () { if (!Fiber.current) { @@ -111,6 +112,14 @@ class EnvironmentVariableAsync { this._set(value); return saved; } + + _isCallAsyncMethodRunning() { + return callAsyncMethodRunning; + } + + _setCallAsyncMethodRunning(value) { + callAsyncMethodRunning = value; + } } /** From 119ed5e21973708bfd78910111e4852aaa599f6f Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Thu, 24 Nov 2022 18:45:08 +0100 Subject: [PATCH 158/292] Update npm-packages/meteor-babel/package.json Co-authored-by: Julian Waller --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 34870d8a86..e447f46515 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.6.4" + "typescript": "~4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", From 8ca7d26386d86cbf324c6213c3ef58e4806d8a1e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 25 Nov 2022 11:47:44 -0300 Subject: [PATCH 159/292] feat: @meteorjs/babel "7.17.0-beta.3 :tada: --- npm-packages/meteor-babel/package.json | 2 +- packages/babel-compiler/package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index e447f46515..c18e1387ff 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.0-beta.1", + "version": "7.17.0-beta.3", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index bdca4af252..437acf2a82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.17.0-beta.1', + '@meteorjs/babel': '7.17.0-beta.3', 'json5': '2.1.1' }); From 1fb621ecc7909447703568dd3635c73349661daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 25 Nov 2022 15:51:33 +0100 Subject: [PATCH 160/292] fixed reference error --- packages/test-in-browser/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..74eb11b465 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type != "finish"; }); var partitionBy = function(seq, func) { From 9eafb6cea6929f0698cac50e8e8ca64c0929be95 Mon Sep 17 00:00:00 2001 From: Zack Newsham Date: Tue, 29 Nov 2022 09:39:44 -0500 Subject: [PATCH 161/292] Make count NOT create a cursor --- packages/mongo/collection_tests.js | 34 ++++++++++++++++++++++++++++-- packages/mongo/mongo_driver.js | 15 +++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/packages/mongo/collection_tests.js b/packages/mongo/collection_tests.js index 78da9a1f18..fb92fb8b79 100644 --- a/packages/mongo/collection_tests.js +++ b/packages/mongo/collection_tests.js @@ -170,8 +170,8 @@ Tinytest.add('collection - calling find with a valid readPreference', ); // Trigger the creation of _synchronousCursor - defaultCursor.count(); - customCursor.count(); + defaultCursor.fetch(); + customCursor.fetch(); // defaultCursor._synchronousCursor._dbCursor.operation is not an option anymore // as the cursor options are now private @@ -384,3 +384,33 @@ Tinytest.add('collection - finding with a query with a binary field should retur } } ); + + +Tinytest.add('collection - count should release the session', + function(test) { + const client = MongoInternals.defaultRemoteCollectionDriver().mongo.client; + var collectionName = 'count' + test.id; + var collection = new Mongo.Collection(collectionName); + collection.insert({ _id: '1' }); + collection.insert({ _id: '2' }); + collection.insert({ _id: '3' }); + const preCount = client.s.activeSessions.size; + + test.equal(collection.find().count(), 3); + + // options and selector still work + test.equal(collection.find({ _id: { $ne: '1' } }, { skip: 1 }).count(), 1); + + // cursor reuse + const cursor1 = collection.find({ _id: { $ne: '1' } }, { skip: 1 }); + test.equal(cursor1.count(), 1); + test.equal(cursor1.fetch().length, 1); + + const cursor2 = collection.find({ _id: { $ne: '1' } }, { skip: 1 }); + test.equal(cursor2.fetch().length, 1); + test.equal(cursor2.count(), 1); + + const postCount = client.s.activeSessions.size; + test.equal(preCount, postCount); + } +); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 5d653636a8..2f7293c05d 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -907,12 +907,27 @@ function setupSynchronousCursor(cursor, method) { return cursor._synchronousCursor; } + [...ASYNC_CURSOR_METHODS, Symbol.iterator, Symbol.asyncIterator].forEach(methodName => { + // count is handled specially since we don't want to create a cursor. + // it is still included in ASYNC_CURSOR_METHODS because we still want an async version of it to exist. + if (methodName === 'count') { + return; + } Cursor.prototype[methodName] = function (...args) { const cursor = setupSynchronousCursor(this, methodName); return cursor[methodName](...args); }; + + Cursor.prototype.count = function () { + const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); + return Promise.await(collection.countDocuments( + replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), + replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), + )); + } + // These methods are handled separately. if (methodName === Symbol.iterator || methodName === Symbol.asyncIterator) { return; From 72ecbf600e630b6e3909ea118b255aadcb55a24d Mon Sep 17 00:00:00 2001 From: Zack Newsham Date: Tue, 29 Nov 2022 10:15:25 -0500 Subject: [PATCH 162/292] move count definition outside of loop and ensure async count method is still defined --- packages/mongo/mongo_driver.js | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 2f7293c05d..98a7017403 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -908,24 +908,22 @@ function setupSynchronousCursor(cursor, method) { } +Cursor.prototype.count = function () { + const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); + return Promise.await(collection.countDocuments( + replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), + replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), + )); +}; + [...ASYNC_CURSOR_METHODS, Symbol.iterator, Symbol.asyncIterator].forEach(methodName => { // count is handled specially since we don't want to create a cursor. // it is still included in ASYNC_CURSOR_METHODS because we still want an async version of it to exist. - if (methodName === 'count') { - return; - } - Cursor.prototype[methodName] = function (...args) { - const cursor = setupSynchronousCursor(this, methodName); - return cursor[methodName](...args); - }; - - - Cursor.prototype.count = function () { - const collection = this._mongo.rawCollection(this._cursorDescription.collectionName); - return Promise.await(collection.countDocuments( - replaceTypes(this._cursorDescription.selector, replaceMeteorAtomWithMongo), - replaceTypes(this._cursorDescription.options, replaceMeteorAtomWithMongo), - )); + if (methodName !== 'count') { + Cursor.prototype[methodName] = function (...args) { + const cursor = setupSynchronousCursor(this, methodName); + return cursor[methodName](...args); + }; } // These methods are handled separately. From aeb61cdbb0aeef14c0a3fd6a170f5077c14b0df5 Mon Sep 17 00:00:00 2001 From: hschmaiske Date: Tue, 29 Nov 2022 13:37:39 -0300 Subject: [PATCH 163/292] add runtime automatic to babel-preset-react --- npm-packages/meteor-babel/options.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 2d582a3102..21a9be7dde 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,7 +80,11 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push(require("@babel/preset-react")); + options.presets.push( + [require("@babel/preset-react"), { + runtime: "automatic" + }] + ); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true From 39c8c4bd9a20652436e9ae816170a24dfa57a546 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 13:43:35 -0300 Subject: [PATCH 164/292] =?UTF-8?q?Meteor=20version=20to=202.8.2=C2=A0:com?= =?UTF-8?q?et:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index b49fccf05e..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 61ada8bf5605cbd02d15213ed9775466ebca68f7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 14:08:06 -0300 Subject: [PATCH 165/292] =?UTF-8?q?Revert=20"Meteor=20version=20to=202.8.2?= =?UTF-8?q?=C2=A0:comet:"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 39c8c4bd9a20652436e9ae816170a24dfa57a546. --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 5eb3cebb85..31ef5d4b77 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2' + version: '1.16.1' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..b49fccf05e 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.8.1", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 31338d29f596b1a88d5b746281239223c84a2b08 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 14:09:28 -0300 Subject: [PATCH 166/292] =?UTF-8?q?Meteor=20version=20to=202.8.2=20?= =?UTF-8?q?=E2=98=84=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mongo/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31ef5d4b77..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.1' + version: '1.16.2' }); Npm.depends({ diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index b49fccf05e..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 0f5ec970edd5a736f593769ca75466123436c84e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:06:36 -0300 Subject: [PATCH 167/292] =?UTF-8?q?Meteor=20version=20to=202.8.2=20?= =?UTF-8?q?=E2=98=84=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/meteor-tool/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index b28bbf6643..eddeaa008c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.1', + version: '2.8.2', }); Package.includeTool(); From be27502ba63a09e15cfd86614160672b9e1e5074 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:21 -0300 Subject: [PATCH 168/292] docs: feat updated docs --- docs/history.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/history.md b/docs/history.md index 724ece077c..84c04c6c0a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,29 @@ +## v2.8.2, 2022-11-29 + +#### Highlights +* `mongo@1.16.2`: + - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + +#### Breaking Changes +N/A + +#### Migration Steps + +#### Meteor Version Release +* `mongo@1.16.2`: + - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@znewsham](https://github.com/znewsham) + +For making this great framework even better! + + ## 2.8.1, 2022-11-14 #### Highlights From 83bebf9b2cd7af8256c902bfb56e66d5ab389bc5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:39 -0300 Subject: [PATCH 169/292] chore: updates meteor babel version --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index a896f5a3a1..c5c361f366 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.0-beta.1", + "version": "7.16.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ From a835b0b7a842fe8da2dfda7058af83c64c712781 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:24:58 -0300 Subject: [PATCH 170/292] chore: update meteor babel in babel-compiler --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 40999ff266..be0b0b6110 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.16.0-beta.1', + '@meteorjs/babel': '7.16.1-beta.0', 'json5': '2.1.1' }); From 5c15f4424d31569175d922c004cf7913fe18cd55 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:25:10 -0300 Subject: [PATCH 171/292] chore: update meteor babel in eslint plugin --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 6d107c5bf8..05ffa321b5 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.1-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 14719b402df08d9d8fb33b0a668f0c4178baf511 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:25:18 -0300 Subject: [PATCH 172/292] chore: update meteor babel in bundle tools --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index a2d440e238..ce78281faa 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.1", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 5cd1c04725ac23abce32338f9c82ebd8ea0c3859 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 18:27:02 -0300 Subject: [PATCH 173/292] chore: update meteor babel in dev-bundle tool --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index 05ffa321b5..ddab44b16d 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.1", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From db03c7f6a25b6ee28008bd3c4be7f4bdc83bb4db Mon Sep 17 00:00:00 2001 From: denihs Date: Tue, 29 Nov 2022 18:22:20 -0400 Subject: [PATCH 174/292] using Meteor._runAsync to wrap _runHandler --- packages/ddp-server-async/livedata_server.js | 92 ++++++++++--------- .../livedata_server_async_tests.js | 5 - .../ddp-server-async/livedata_server_tests.js | 4 +- packages/meteor/asl-helpers.js | 19 ++-- 4 files changed, 63 insertions(+), 57 deletions(-) diff --git a/packages/ddp-server-async/livedata_server.js b/packages/ddp-server-async/livedata_server.js index 533e01b701..b1dce0c369 100644 --- a/packages/ddp-server-async/livedata_server.js +++ b/packages/ddp-server-async/livedata_server.js @@ -1106,52 +1106,60 @@ var Subscription = function ( Object.assign(Subscription.prototype, { _runHandler: function() { - // XXX should we unblock() here? Either before running the publish - // function, or before running _publishCursor. - // - // Right now, each publish function blocks all future publishes and - // methods waiting on data from Mongo (or whatever else the function - // blocks on). This probably slows page load in common cases. + Meteor._runAsync( + () => { + // XXX should we unblock() here? Either before running the publish + // function, or before running _publishCursor. + // + // Right now, each publish function blocks all future publishes and + // methods waiting on data from Mongo (or whatever else the function + // blocks on). This probably slows page load in common cases. - if (!this.unblock) { - this.unblock = () => {}; - } + if (!this.unblock) { + this.unblock = () => {}; + } - const self = this; - let resultOrThenable = null; - try { - resultOrThenable = DDP._CurrentPublicationInvocation.withValue(self, () => - maybeAuditArgumentChecks( - self._handler, - self, - EJSON.clone(self._params), - // It's OK that this would look weird for universal subscriptions, - // because they have no arguments so there can never be an - // audit-argument-checks failure. - "publisher '" + self._name + "'" - ) - ); - } catch (e) { - self.error(e); - return; - } + const self = this; + let resultOrThenable = null; + try { + resultOrThenable = DDP._CurrentPublicationInvocation.withValue( + self, + () => + maybeAuditArgumentChecks( + self._handler, + self, + EJSON.clone(self._params), + // It's OK that this would look weird for universal subscriptions, + // because they have no arguments so there can never be an + // audit-argument-checks failure. + "publisher '" + self._name + "'" + ) + ); + } catch (e) { + self.error(e); + return; + } - // Did the handler call this.error or this.stop? - if (self._isDeactivated()) return; + // Did the handler call this.error or this.stop? + if (self._isDeactivated()) return; - // Both conventional and async publish handler functions are supported. - // If an object is returned with a then() function, it is either a promise - // or thenable and will be resolved asynchronously. - const isThenable = - resultOrThenable && typeof resultOrThenable.then === 'function'; - if (isThenable) { - Promise.resolve(resultOrThenable).then( - (...args) => self._publishHandlerResult.bind(self)(...args), - e => self.error(e) - ); - } else { - self._publishHandlerResult(resultOrThenable); - } + // Both conventional and async publish handler functions are supported. + // If an object is returned with a then() function, it is either a promise + // or thenable and will be resolved asynchronously. + const isThenable = + resultOrThenable && typeof resultOrThenable.then === 'function'; + if (isThenable) { + Promise.resolve(resultOrThenable).then( + (...args) => self._publishHandlerResult.bind(self)(...args), + e => self.error(e) + ); + } else { + self._publishHandlerResult(resultOrThenable); + } + }, + this, + { callId: '_runHandler' } + ); }, _publishHandlerResult: function (res) { diff --git a/packages/ddp-server-async/livedata_server_async_tests.js b/packages/ddp-server-async/livedata_server_async_tests.js index ca00cc338b..d66a28f091 100644 --- a/packages/ddp-server-async/livedata_server_async_tests.js +++ b/packages/ddp-server-async/livedata_server_async_tests.js @@ -35,11 +35,6 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); - // console.log('onStopMethodInvocation', onStopMethodInvocation); - - - console.log('onStopPublicationInvocation', !!onStopPublicationInvocation, this.userId); - callback.call( this, diff --git a/packages/ddp-server-async/livedata_server_tests.js b/packages/ddp-server-async/livedata_server_tests.js index 0e7c970b12..101b1c2a93 100644 --- a/packages/ddp-server-async/livedata_server_tests.js +++ b/packages/ddp-server-async/livedata_server_tests.js @@ -179,7 +179,7 @@ Meteor.publish("livedata_server_test_sub_method", async function (connectionId) this.stop(); }); -Meteor.publish("livedata_server_test_sub_context", function (connectionId, userId) { +Meteor.publish("livedata_server_test_sub_context", async function (connectionId, userId) { var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); @@ -201,7 +201,7 @@ Meteor.publish("livedata_server_test_sub_context", function (connectionId, userI this.stop(); } else { this.ready(); - Meteor.call('livedata_server_test_setuserid', userId); + await Meteor.callAsync('livedata_server_test_setuserid', userId); } }); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js index 0d4ab7688a..859d767ee0 100644 --- a/packages/meteor/asl-helpers.js +++ b/packages/meteor/asl-helpers.js @@ -7,18 +7,21 @@ Meteor._getAslStore = getAslStore; Meteor._getValueFromAslStore = getValueFromAslStore; Meteor._updateAslStore = updateAslStore; -Meteor._runAsync = (fn, ctx) => { +Meteor._runAsync = (fn, ctx, store = {}) => { if (Meteor._isFibersEnabled) { - const Fiber = Npm.require('fibers'); + const Fiber = Npm.require('fibers'); - return Fiber(() => { - fn.call(ctx); - }).run(); + return Fiber(() => { + fn.call(ctx); + }).run(); } - return global.asyncLocalStorage.run(Meteor._getAslStore(), () => { - fn.call(ctx); - }); + return global.asyncLocalStorage.run( + { ...Meteor._getAslStore(), ...store }, + () => { + return fn.call(ctx); + } + ); }; Meteor._isPromise = (r) => { From 544ca59e1aeb386f853e18a35b3b559b87a9cb88 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:36:51 -0300 Subject: [PATCH 175/292] chore: updated meteor-babel to 7.17.1 --- npm-packages/meteor-babel/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index c18e1387ff..0dd8a7b838 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.0-beta.3", + "version": "7.17.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ From c6b6397e4c1b2287ce24386ee87ebfdee7ebee56 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:22 -0300 Subject: [PATCH 176/292] chore: updated deps from babel-compiler in meteor --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 437acf2a82..197b62c72d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -5,7 +5,7 @@ Package.describe({ }); Npm.depends({ - '@meteorjs/babel': '7.17.0-beta.3', + '@meteorjs/babel': '7.17.1-beta.0', 'json5': '2.1.1' }); From 65c67762d036d6be726375c28d9215eb35f8204c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:34 -0300 Subject: [PATCH 177/292] chore updated dev bundle dependecies --- .../eslint-plugin-meteor/scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index cce457c339..de71198d42 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.6.4", - "@meteorjs/babel": "7.17.0-beta.1", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From bfa04a7d67dd4715782636e45e07eeba4dfd88c5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:37:47 -0300 Subject: [PATCH 178/292] chore: updated tools dependencie --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index e0f21db047..301661ce9c 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.0-beta.7", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From f919a6a7d702573e9504c807d0b6cd905d797997 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 10:39:04 -0300 Subject: [PATCH 179/292] chore: updated babel-compiler version --- packages/babel-compiler/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 197b62c72d..607482696c 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.0-beta.1' + version: '7.10.1-beta.1' }); Npm.depends({ From 7c9c0092656de0b7b36c967ea6fe694470955414 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:36:29 -0300 Subject: [PATCH 180/292] chore: updated mongo driver --- packages/npm-mongo/package.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 63696bf272..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0', + version: '4.12.1', documentation: null }); Npm.depends({ - mongodb: "4.11.0" + mongodb: "4.12.1" }); Package.onUse(function (api) { From 794809cccc0538185e786b8a7bc761b7ff5bef2b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:38:38 -0300 Subject: [PATCH 181/292] chore: updating babel shrinkwrap --- .../.npm/package/npm-shrinkwrap.json | 746 +++++++++--------- 1 file changed, 358 insertions(+), 388 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4453e83e92..6b29dfbba0 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,206 +2,213 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + } + } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -219,9 +226,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -249,139 +256,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" }, "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" }, "@babel/runtime": { "version": "7.17.2", @@ -389,39 +396,49 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.16.0-beta.1", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", - "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -436,9 +453,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "acorn": { "version": "6.4.2", @@ -463,38 +480,33 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -506,14 +518,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -523,17 +535,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -548,62 +560,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -613,12 +625,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" }, "babel-preset-meteor": { "version": "7.10.0", @@ -626,24 +638,19 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", + "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" }, "browserslist": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", - "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" + "version": "1.0.30001435", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", + "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==" }, "chalk": { "version": "2.4.2", @@ -658,39 +665,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "escalade": { "version": "3.1.1", @@ -700,7 +695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "estree-walker": { "version": "2.0.2", @@ -722,11 +717,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -740,17 +730,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" }, "is-reference": { "version": "1.2.1", @@ -780,22 +765,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "ms": { "version": "2.1.2", @@ -803,19 +788,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "path-parse": { "version": "1.0.7", @@ -838,62 +813,52 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -912,12 +877,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -930,14 +895,19 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" } } } From eaa87a0ee5d5e5596de3fbf83b948e93a43552c1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:38:50 -0300 Subject: [PATCH 182/292] chore: updating npm-mongo shrinkwrap --- .../.npm/package/npm-shrinkwrap.json | 374 +++++++++--------- 1 file changed, 192 insertions(+), 182 deletions(-) diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 11662ebe99..b276e22ce7 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,214 +62,224 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", - "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", + "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", - "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", + "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" }, "@aws-sdk/client-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", - "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", + "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", + "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" }, "@aws-sdk/client-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", - "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", + "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" }, "@aws-sdk/config-resolver": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", - "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", + "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", - "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", + "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" }, "@aws-sdk/credential-provider-env": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", - "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", + "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", - "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", + "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", - "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", + "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" }, "@aws-sdk/credential-provider-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", - "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", + "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" }, "@aws-sdk/credential-provider-process": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", - "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", + "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", - "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", + "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", - "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", + "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" }, "@aws-sdk/credential-providers": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", - "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", + "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", - "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", + "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" }, "@aws-sdk/hash-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", - "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", + "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" }, "@aws-sdk/invalid-dependency": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", - "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", + "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" }, "@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" }, "@aws-sdk/middleware-content-length": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", - "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", + "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", + "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" }, "@aws-sdk/middleware-host-header": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", - "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", + "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" }, "@aws-sdk/middleware-logger": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", - "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", + "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", - "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", + "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" }, "@aws-sdk/middleware-retry": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", - "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", + "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", - "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", + "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" }, "@aws-sdk/middleware-serde": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", - "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", + "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" }, "@aws-sdk/middleware-signing": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", - "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", + "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" }, "@aws-sdk/middleware-stack": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", - "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", + "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", - "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", + "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" }, "@aws-sdk/node-config-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", - "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", + "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" }, "@aws-sdk/node-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", - "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", + "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" }, "@aws-sdk/property-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", - "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", + "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" }, "@aws-sdk/protocol-http": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", - "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", + "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" }, "@aws-sdk/querystring-builder": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", - "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", + "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" }, "@aws-sdk/querystring-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", - "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", + "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" }, "@aws-sdk/service-error-classification": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", - "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", + "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", - "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", + "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" }, "@aws-sdk/signature-v4": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", - "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", + "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" }, "@aws-sdk/smithy-client": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", - "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", + "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" + }, + "@aws-sdk/token-providers": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", + "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" }, "@aws-sdk/types": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", - "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" }, "@aws-sdk/url-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", - "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", + "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" }, - "@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" - }, - "@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -277,59 +287,64 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" }, "@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" }, "@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", - "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", + "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", - "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", + "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" + }, + "@aws-sdk/util-endpoints": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", + "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" }, "@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" }, "@aws-sdk/util-middleware": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", - "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", + "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" }, "@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", - "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", + "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", - "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", + "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -337,14 +352,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", - "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", + "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" }, "@types/node": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", - "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -376,11 +391,6 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -402,14 +412,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", + "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" }, "mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" }, "punycode": { "version": "2.1.1", @@ -447,9 +457,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "uuid": { "version": "8.3.2", From 0c20daea4af2d61375b1a74e71be2351e6e4c91f Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 30 Nov 2022 10:47:14 -0400 Subject: [PATCH 183/292] creating function withValueExt e getExt --- .../.npm/package/npm-shrinkwrap.json | 746 +++++++++--------- packages/ddp-server-async/livedata_server.js | 96 ++- .../livedata_server_async_tests.js | 4 +- .../ddp-server-async/livedata_server_tests.js | 4 +- packages/meteor/dynamics_nodejs.js | 123 +-- 5 files changed, 485 insertions(+), 488 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4453e83e92..3cdf6b8611 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,206 +2,213 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + } + } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -219,9 +226,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -249,139 +256,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" }, "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" }, "@babel/runtime": { "version": "7.17.2", @@ -389,39 +396,49 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.16.0-beta.1", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", - "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" + "version": "7.16.0-beta.7", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.7.tgz", + "integrity": "sha512-++ZngcRX51mu0fgijc7VYQnVlPr2tiq5p+sr1tOSQoe6gqH4toRCzVr4lzmPkrBXHl9IvSvkWcQYIGP5iSRsJw==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -436,9 +453,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "acorn": { "version": "6.4.2", @@ -463,38 +480,33 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -506,14 +518,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -523,17 +535,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -548,62 +560,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -613,12 +625,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" }, "babel-preset-meteor": { "version": "7.10.0", @@ -626,24 +638,19 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", + "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" }, "browserslist": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", - "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" + "version": "1.0.30001434", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", + "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==" }, "chalk": { "version": "2.4.2", @@ -658,39 +665,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "escalade": { "version": "3.1.1", @@ -700,7 +695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "estree-walker": { "version": "2.0.2", @@ -722,11 +717,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -740,17 +730,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" }, "is-reference": { "version": "1.2.1", @@ -780,22 +765,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "ms": { "version": "2.1.2", @@ -803,19 +788,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "path-parse": { "version": "1.0.7", @@ -838,62 +813,52 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -912,12 +877,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -930,14 +895,19 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" } } } diff --git a/packages/ddp-server-async/livedata_server.js b/packages/ddp-server-async/livedata_server.js index b1dce0c369..5677e82888 100644 --- a/packages/ddp-server-async/livedata_server.js +++ b/packages/ddp-server-async/livedata_server.js @@ -1106,60 +1106,56 @@ var Subscription = function ( Object.assign(Subscription.prototype, { _runHandler: function() { - Meteor._runAsync( - () => { - // XXX should we unblock() here? Either before running the publish - // function, or before running _publishCursor. - // - // Right now, each publish function blocks all future publishes and - // methods waiting on data from Mongo (or whatever else the function - // blocks on). This probably slows page load in common cases. + // XXX should we unblock() here? Either before running the publish + // function, or before running _publishCursor. + // + // Right now, each publish function blocks all future publishes and + // methods waiting on data from Mongo (or whatever else the function + // blocks on). This probably slows page load in common cases. - if (!this.unblock) { - this.unblock = () => {}; - } + if (!this.unblock) { + this.unblock = () => {}; + } - const self = this; - let resultOrThenable = null; - try { - resultOrThenable = DDP._CurrentPublicationInvocation.withValue( + const self = this; + let resultOrThenable = null; + try { + resultOrThenable = DDP._CurrentPublicationInvocation.withValueExt( + self, + () => + maybeAuditArgumentChecks( + self._handler, self, - () => - maybeAuditArgumentChecks( - self._handler, - self, - EJSON.clone(self._params), - // It's OK that this would look weird for universal subscriptions, - // because they have no arguments so there can never be an - // audit-argument-checks failure. - "publisher '" + self._name + "'" - ) - ); - } catch (e) { - self.error(e); - return; - } + EJSON.clone(self._params), + // It's OK that this would look weird for universal subscriptions, + // because they have no arguments so there can never be an + // audit-argument-checks failure. + "publisher '" + self._name + "'" + ), + { name: self._name } + ); + } catch (e) { + self.error(e); + return; + } - // Did the handler call this.error or this.stop? - if (self._isDeactivated()) return; + // Did the handler call this.error or this.stop? + if (self._isDeactivated()) return; + + // Both conventional and async publish handler functions are supported. + // If an object is returned with a then() function, it is either a promise + // or thenable and will be resolved asynchronously. + const isThenable = + resultOrThenable && typeof resultOrThenable.then === 'function'; + if (isThenable) { + Promise.resolve(resultOrThenable).then( + (...args) => self._publishHandlerResult.bind(self)(...args), + e => self.error(e) + ); + } else { + self._publishHandlerResult(resultOrThenable); + } - // Both conventional and async publish handler functions are supported. - // If an object is returned with a then() function, it is either a promise - // or thenable and will be resolved asynchronously. - const isThenable = - resultOrThenable && typeof resultOrThenable.then === 'function'; - if (isThenable) { - Promise.resolve(resultOrThenable).then( - (...args) => self._publishHandlerResult.bind(self)(...args), - e => self.error(e) - ); - } else { - self._publishHandlerResult(resultOrThenable); - } - }, - this, - { callId: '_runHandler' } - ); }, _publishHandlerResult: function (res) { @@ -1811,7 +1807,7 @@ Object.assign(Server.prototype, { }; var connection = null; var currentMethodInvocation = DDP._CurrentMethodInvocation.get(); - var currentPublicationInvocation = DDP._CurrentPublicationInvocation.get(); + var currentPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); var randomSeed = null; if (currentMethodInvocation) { userId = currentMethodInvocation.userId; diff --git a/packages/ddp-server-async/livedata_server_async_tests.js b/packages/ddp-server-async/livedata_server_async_tests.js index d66a28f091..65b8d3b8eb 100644 --- a/packages/ddp-server-async/livedata_server_async_tests.js +++ b/packages/ddp-server-async/livedata_server_async_tests.js @@ -21,7 +21,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( await sleep(50); var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); - var publicationInvocation = DDP._CurrentPublicationInvocation.get(); + var publicationInvocation = DDP._CurrentPublicationInvocation.getExt(); // console.log('methodInvocation', methodInvocation); // console.log('publicationInvocation', !!publicationInvocation); @@ -34,7 +34,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( // and that it runs with the same environment variables as this publish function. this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); - var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); + var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); callback.call( this, diff --git a/packages/ddp-server-async/livedata_server_tests.js b/packages/ddp-server-async/livedata_server_tests.js index 101b1c2a93..d4e40890d6 100644 --- a/packages/ddp-server-async/livedata_server_tests.js +++ b/packages/ddp-server-async/livedata_server_tests.js @@ -182,7 +182,7 @@ Meteor.publish("livedata_server_test_sub_method", async function (connectionId) Meteor.publish("livedata_server_test_sub_context", async function (connectionId, userId) { var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); - var publicationInvocation = DDP._CurrentPublicationInvocation.get(); + var publicationInvocation = DDP._CurrentPublicationInvocation.getExt(); // Check the publish function's environment variables and context. if (callback) { @@ -193,7 +193,7 @@ Meteor.publish("livedata_server_test_sub_context", async function (connectionId, // and that it runs with the same environment variables as this publish function. this.onStop(function () { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); - var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); + var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); callback.call(this, onStopMethodInvocation, onStopPublicationInvocation, true); }); diff --git a/packages/meteor/dynamics_nodejs.js b/packages/meteor/dynamics_nodejs.js index 0d8ba74727..2171240e51 100644 --- a/packages/meteor/dynamics_nodejs.js +++ b/packages/meteor/dynamics_nodejs.js @@ -5,11 +5,13 @@ var Fiber = Meteor._isFibersEnabled && Npm.require('fibers'); let nextSlot = 0; let callAsyncMethodRunning = false; -Meteor._nodeCodeMustBeInFiber = function () { +Meteor._nodeCodeMustBeInFiber = function() { if (!Fiber.current) { - throw new Error("Meteor code must always run within a Fiber. " + - "Try wrapping callbacks that you pass to non-Meteor " + - "libraries with Meteor.bindEnvironment."); + throw new Error( + 'Meteor code must always run within a Fiber. ' + + 'Try wrapping callbacks that you pass to non-Meteor ' + + 'libraries with Meteor.bindEnvironment.' + ); } }; @@ -21,21 +23,23 @@ class EnvironmentVariableFibers { get() { Meteor._nodeCodeMustBeInFiber(); - return Fiber.current._meteor_dynamics && - Fiber.current._meteor_dynamics[this.slot]; + return ( + Fiber.current._meteor_dynamics && + Fiber.current._meteor_dynamics[this.slot] + ); } getOrNullIfOutsideFiber() { - if (!Fiber.current) - return null; + if (!Fiber.current) return null; return this.get(); } withValue(value, func) { Meteor._nodeCodeMustBeInFiber(); - if (!Fiber.current._meteor_dynamics) + if (!Fiber.current._meteor_dynamics) { Fiber.current._meteor_dynamics = []; + } var currentValues = Fiber.current._meteor_dynamics; var saved = currentValues[this.slot]; @@ -69,16 +73,19 @@ class EnvironmentVariableAsync { } get() { - const currentValue = Meteor._getValueFromAslStore("_meteor_dynamics"); + const currentValue = Meteor._getValueFromAslStore('_meteor_dynamics'); return currentValue && currentValue[this.slot]; } + getExt() { + return Meteor._getValueFromAslStore('currentValue'); + } getOrNullIfOutsideFiber() { return this.get(); } async withValue(value, func) { - let currentValues = Meteor._getValueFromAslStore("_meteor_dynamics"); + let currentValues = Meteor._getValueFromAslStore('_meteor_dynamics'); if (!currentValues) { currentValues = []; } @@ -87,23 +94,46 @@ class EnvironmentVariableAsync { let ret; try { currentValues[this.slot] = value; - Meteor._updateAslStore("_meteor_dynamics", currentValues); + Meteor._updateAslStore('_meteor_dynamics', currentValues); ret = await func(); } finally { currentValues[this.slot] = saved; - Meteor._updateAslStore("_meteor_dynamics", currentValues); + Meteor._updateAslStore('_meteor_dynamics', currentValues); } return ret; } + async withValueExt(value, func, storeOptions = {}) { + return Meteor._runAsync( + async () => { + let ret; + try { + Meteor._updateAslStore('currentValue', value); + ret = await func(); + } finally { + console.log( + `withValueExt finish running ${Meteor._getValueFromAslStore( + 'callId' + ) || 'no-id'} from met/sub ${Meteor._getValueFromAslStore('name') || + 'no-name'}` + ); + } + return ret; + }, + this, + { callId: `withValueExt-${this.slot}`, ...storeOptions } + ); + } + _set(context) { - const _meteor_dynamics = Meteor._getValueFromAslStore("_meteor_dynamics") || []; + const _meteor_dynamics = + Meteor._getValueFromAslStore('_meteor_dynamics') || []; _meteor_dynamics[this.slot] = context; } _setNewContextAndGetCurrent(value) { - let _meteor_dynamics = Meteor._getValueFromAslStore("_meteor_dynamics"); + let _meteor_dynamics = Meteor._getValueFromAslStore('_meteor_dynamics'); if (!_meteor_dynamics) { _meteor_dynamics = []; } @@ -128,7 +158,9 @@ class EnvironmentVariableAsync { * @locus Anywhere * @class */ -Meteor.EnvironmentVariable = Meteor._isFibersEnabled ? EnvironmentVariableFibers : EnvironmentVariableAsync; +Meteor.EnvironmentVariable = Meteor._isFibersEnabled + ? EnvironmentVariableFibers + : EnvironmentVariableAsync; // Meteor application code is always supposed to be run inside a // fiber. bindEnvironment ensures that the function it wraps is run from @@ -160,8 +192,10 @@ Meteor.EnvironmentVariable = Meteor._isFibersEnabled ? EnvironmentVariableFibers * @param {Object} _this Optional `this` object against which the original function will be invoked * @return {Function} The wrapped function */ -Meteor.bindEnvironment = function (func, onException, _this) { - return Meteor._isFibersEnabled ? bindEnvironmentFibers(func, onException, _this) : bindEnvironmentAsync(func, onException, _this); +Meteor.bindEnvironment = function(func, onException, _this) { + return Meteor._isFibersEnabled + ? bindEnvironmentFibers(func, onException, _this) + : bindEnvironmentAsync(func, onException, _this); }; const bindEnvironmentFibers = (func, onException, _this) => { @@ -170,22 +204,21 @@ const bindEnvironmentFibers = (func, onException, _this) => { var dynamics = Fiber.current._meteor_dynamics; var boundValues = dynamics ? dynamics.slice() : []; - if (!onException || typeof(onException) === 'string') { - var description = onException || "callback of async function"; - onException = function (error) { - Meteor._debug( - "Exception in " + description + ":", - error - ); + if (!onException || typeof onException === 'string') { + var description = onException || 'callback of async function'; + onException = function(error) { + Meteor._debug('Exception in ' + description + ':', error); }; - } else if (typeof(onException) !== 'function') { - throw new Error('onException argument must be a function, string or undefined for Meteor.bindEnvironment().'); + } else if (typeof onException !== 'function') { + throw new Error( + 'onException argument must be a function, string or undefined for Meteor.bindEnvironment().' + ); } - return function (/* arguments */) { + return function(/* arguments */) { var args = Array.prototype.slice.call(arguments); - var runWithEnvironment = function () { + var runWithEnvironment = function() { var savedValues = Fiber.current._meteor_dynamics; try { // Need to clone boundValues in case two fibers invoke this @@ -203,44 +236,42 @@ const bindEnvironmentFibers = (func, onException, _this) => { return ret; }; - if (Fiber.current) - return runWithEnvironment(); + if (Fiber.current) return runWithEnvironment(); Fiber(runWithEnvironment).run(); }; }; const bindEnvironmentAsync = (func, onException, _this) => { - var dynamics = Meteor._getValueFromAslStore("_meteor_dynamics"); + var dynamics = Meteor._getValueFromAslStore('_meteor_dynamics'); var boundValues = Array.isArray(dynamics) ? dynamics.slice() : []; - if (!onException || typeof(onException) === 'string') { - var description = onException || "callback of async function"; - onException = function (error) { - Meteor._debug( - "Exception in " + description + ":", - error - ); + if (!onException || typeof onException === 'string') { + var description = onException || 'callback of async function'; + onException = function(error) { + Meteor._debug('Exception in ' + description + ':', error); }; - } else if (typeof(onException) !== 'function') { - throw new Error('onException argument must be a function, string or undefined for Meteor.bindEnvironment().'); + } else if (typeof onException !== 'function') { + throw new Error( + 'onException argument must be a function, string or undefined for Meteor.bindEnvironment().' + ); } - return function (/* arguments */) { + return function(/* arguments */) { var args = Array.prototype.slice.call(arguments); - var runWithEnvironment = async function () { - const savedValues = Meteor._getValueFromAslStore("_meteor_dynamics"); + var runWithEnvironment = async function() { + const savedValues = Meteor._getValueFromAslStore('_meteor_dynamics'); let ret; try { // Need to clone boundValues in case two fibers invoke this // function at the same time // TODO -> Probably not needed - Meteor._updateAslStore("_meteor_dynamics", boundValues.slice()); + Meteor._updateAslStore('_meteor_dynamics', boundValues.slice()); ret = await func.apply(_this, args); } catch (e) { onException(e); } finally { - Meteor._updateAslStore("_meteor_dynamics", savedValues); + Meteor._updateAslStore('_meteor_dynamics', savedValues); } return ret; }; From f3c6de4a719ec3648dee8b0031523e7cf97e7371 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 11:57:21 -0300 Subject: [PATCH 184/292] Meteor version to 2.9-rc.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index b707f589a2..8816e4ef4c 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-beta.1', + version: '2.2.6-rc.0', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index cb23dbd2ad..3539e662b6 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-beta.1", + version: "1.4.2-rc.0", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index cccb4f7dd5..beec9157bf 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-beta.1', + version: '2.3.2-rc.0', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 607482696c..304ca9858d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-beta.1' + version: '7.10.1-rc.0' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index c61c9c5b73..a99815d2e6 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-beta.1', + version: '2.2.3-rc.0', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index a5277d5090..af82e41dde 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-beta.1' + version: '1.11.2-rc.0' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 404779adbc..03edb1dcf7 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-beta.1' + version: '1.4.1-rc.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 8b50f77029..95d140cd6a 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-beta.1", + version: "1.4.3-rc.0", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f8af313b72..f79693e736 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-beta.1' + version: '1.1.2-rc.0' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 984b6bfb0b..341795461b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-beta.1' + version: '1.3.2-rc.0' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 50aa8cd5f0..be85c4b795 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-beta.1', + version: '2.9.0-rc.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 9513d32ec7..8ebc99ece4 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-beta.1' + version: '1.10.3-rc.0' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index f2b43c5d99..da297fa377 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-beta.1' + version: '1.6.2-rc.0' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index b65eef1f20..b6bc17b87d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-beta.1' + version: '1.9.1-rc.0' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ec1b8855f9..f4e8b398f5 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-beta.1' + version: '1.16.2-rc.0' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..3188582d2e 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.12.1-rc.0', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f048a7052f..8ab2dc6dde 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-beta.1" + version: "2.1.3-rc.0" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index f103a140f8..769c5e81d7 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-beta.1", + version: "1.5.1-rc.0", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4461057e41..ccfe9d30bd 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-beta.1", + version: "1.3.2-rc.0", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 5150ec6023..989ae04320 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.0" + version: "3.2.1-rc.0" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index d5e9589a34..bd294265ab 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-beta.1", + version: "0.12.2-rc.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 02118cdbe7..43e3f2ead3 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-beta.1', + version: '1.8.3-rc.0', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 63c1dfc334..92c3c33cea 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-beta.1' + version: '1.3.1-rc.0' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 1a302849c0..f9d58e4b57 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-beta.1', + version: '1.3.2-rc.0', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 9b978369a3..28f46347c5 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-beta.1' + version: '1.2.2-rc.0' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index aff292bc4e..08b07fe4bd 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-beta.1' + version: '1.3.2-rc.0' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..c96306511e 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.6.4-rc.0', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 96466043f5..ac04263ebd 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-beta.1", + version: "1.3.2-rc.0", }); Package.onUse(api => { From 59cc6006f8f9cf1283c7f5eebd9175df3a0911fe Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 12:02:59 -0300 Subject: [PATCH 185/292] Meteor version to 2.9-rc.0 :comet: --- scripts/admin/meteor-release-experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 240846fd90..2ad53ae66c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-beta.1", + "version": "2.9.0-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" From b461058b339e2d0e7422cc5a4d44e878985d4799 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 12:18:36 -0300 Subject: [PATCH 186/292] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.1?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 8816e4ef4c..269724043d 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.0', + version: '2.2.6-rc.1', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 3539e662b6..b67d3499b2 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.0", + version: "1.4.2-rc.1", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index beec9157bf..4b2be2da36 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.0', + version: '2.3.2-rc.1', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 304ca9858d..fabfb21436 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.0' + version: '7.10.1-rc.1' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index a99815d2e6..6d6dabb8d6 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.0', + version: '2.2.3-rc.1', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index af82e41dde..21c806c9b4 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.0' + version: '1.11.2-rc.1' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 03edb1dcf7..8637c9778a 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.0' + version: '1.4.1-rc.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 95d140cd6a..80ac52abfe 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.0", + version: "1.4.3-rc.1", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f79693e736..8ac5e1fc74 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.0' + version: '1.1.2-rc.1' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 341795461b..67fd681235 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.0' + version: '1.3.2-rc.1' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index be85c4b795..c1745ccdcd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.0', + version: '2.9.0-rc.1', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8ebc99ece4..7c12582e2b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.0' + version: '1.10.3-rc.1' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index da297fa377..61aca97318 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.0' + version: '1.6.2-rc.1' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index b6bc17b87d..f6d3418c2f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.0' + version: '1.9.1-rc.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f4e8b398f5..a1b167081b 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.0' + version: '1.16.2-rc.1' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 3188582d2e..5d7723d7dc 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.0', + version: '4.12.1-rc.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8ab2dc6dde..4ac0dd16d2 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.0" + version: "2.1.3-rc.1" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 769c5e81d7..8e78ae26c2 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.0", + version: "1.5.1-rc.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index ccfe9d30bd..640269624f 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.0", + version: "1.3.2-rc.1", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 989ae04320..2af2cf6bb8 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.0" + version: "3.2.1-rc.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bd294265ab..b75d54bed2 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.0", + version: "0.12.2-rc.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 43e3f2ead3..b38e2ba01b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.0', + version: '1.8.3-rc.1', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 92c3c33cea..b594f6df81 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.0' + version: '1.3.1-rc.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index f9d58e4b57..4ba792e755 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.0', + version: '1.3.2-rc.1', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 28f46347c5..b2a9bc96cf 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.0' + version: '1.2.2-rc.1' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 08b07fe4bd..16b5b90533 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.0' + version: '1.3.2-rc.1' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index c96306511e..40ced291f1 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.0', + version: '4.6.4-rc.1', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index ac04263ebd..9dcac977c0 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.0", + version: "1.3.2-rc.1", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 2ad53ae66c..ef786cef8b 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.0", + "version": "2.9.0-rc.1", "recommended": false, "official": false, "description": "Meteor experimental release" From c615a3118081a4b5061a8e0db7a1c5f3d9ea094f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 14:19:48 -0300 Subject: [PATCH 187/292] docs: added notes on babel --- docs/history.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/history.md b/docs/history.md index 84c04c6c0a..d8e5806060 100644 --- a/docs/history.md +++ b/docs/history.md @@ -4,7 +4,8 @@ * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327). + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Breaking Changes N/A @@ -15,7 +16,8 @@ N/A * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - - ADjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) From ceb6cd510a4c3c702ec709729922d44876541958 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 16:42:09 -0300 Subject: [PATCH 188/292] docs: adjusted what changed --- docs/history.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 74ec5cd7d0..5eeef4bf69 100644 --- a/docs/history.md +++ b/docs/history.md @@ -2,14 +2,94 @@ ### Highlights * TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) - +* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) +* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) +* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) +* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) +* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) +* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) +* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) +* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) +* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) +* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) +* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) #### Breaking Changes + * Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + #### Migration Steps #### Meteor Version Release +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 + +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `meteorjs/babel@7.17.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 +* `accounts-base@2.2.6` + - Moved some functions to accounts-oauth. +* `accounts-oauth@1.4.2` + - Received functions from accounts-base. +* `accounts-password@2.3.2` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` +* `babel-compiler@7.10.1` + - Updated babel to 7.17.1. +* `email@2.2.3` + - Create Email.sendAsync method without using Fibers. +* `facebook-oauth@1.11.2` + - Updated facebook-oauth to use async functions. +* `github-oauth@1.4.1` + - Updated github-oauth to use async functions. +* `google-oauth@1.4.3` + - Updated google-oauth to use async functions. +* `meetup-oauth@1.1.2` + - Updated meetup-oauth to use async functions. +* `meteor-developer-oauth@1.3.2` + - Updated meteor-developer-oauth to use async functions. +* `meteor@1.10.3` + - Added Async Local Storage helpers. +* `minifier-css@1.6.2` + - Asyncfied `minifyCss` function. +* `minimongo@1.9.1` + - Implemented Fibers-less MongoDB count methods. +* `mongo@1.16.2` + - Implemented Fibers-less MongoDB count methods. +* `npm-mongo@4.12.1` + - Updated npm-mongo to 4.12. +* `oauth@2.1.3` + - Asyncfied methods. +* `oauth1@1.5.1` + - Asyncfied methods. +* `oauth2@1.3.2` + - Asyncfied methods. +* `package-version-parser@3.2.1` + - Removed underscore. +* `promise@0.12.2` + - Added DISABLE_FIBERS flag. +* `standard-minifier-css@1.8.3` + - Asyncfied minify method. +* `test-helpers@1.3.1` + - added runAndThrowIfNeeded function. +* `test-in-browser@1.3.2` + - Adjusted e[type] to e.type +* `tinytest@1.2.2` + - TinyTest package without Future +* `twitter-oauth@1.3.2` + - Asyncfied methods. +* `typescript@4.6.4` + - updated typescript to 4.6.4. +* `weibo-oauth@1.3.2` + - Asyncfied methods. + ## v2.8.2, 2022-11-29 From f0c9e9e41b16d7d2ab534cac0bf2921ae5903c44 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 16:53:22 -0300 Subject: [PATCH 189/292] docs: removed unessary comment --- docs/history.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/history.md b/docs/history.md index 5eeef4bf69..f5175dcc46 100644 --- a/docs/history.md +++ b/docs/history.md @@ -26,9 +26,6 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel From 66f50c13b5c2dffb1b8accf8f79b01f17456b13c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:03:13 -0300 Subject: [PATCH 190/292] chore: new dev bundle --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 0779da7ba2..9e615ab4c0 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.0 +BUNDLE_VERSION=14.21.1.1 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From b60d7d44f505f383e9090f6ef5ce206210cbf434 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 30 Nov 2022 17:15:05 -0400 Subject: [PATCH 191/292] changing EV.withValue, EV.get, and bindEv to work with ALS without relaying on global array --- packages/ddp-server-async/livedata_server.js | 53 ++++++----- .../livedata_server_async_tests.js | 4 +- .../ddp-server-async/livedata_server_tests.js | 4 +- packages/meteor/asl-helpers.js | 2 +- packages/meteor/dynamics_nodejs.js | 88 ++++++++----------- tools/static-assets/server/boot.js | 4 +- 6 files changed, 70 insertions(+), 85 deletions(-) diff --git a/packages/ddp-server-async/livedata_server.js b/packages/ddp-server-async/livedata_server.js index 5677e82888..9cadd4d4ee 100644 --- a/packages/ddp-server-async/livedata_server.js +++ b/packages/ddp-server-async/livedata_server.js @@ -762,33 +762,32 @@ Object.assign(Session.prototype, { } } - const getCurrentMethodInvocationResult = () => { - const currentContext = DDP._CurrentMethodInvocation._setNewContextAndGetCurrent( - invocation + const getCurrentMethodInvocationResult = () => + DDP._CurrentPublicationInvocation.withValue( + invocation, + () => + maybeAuditArgumentChecks( + handler, + invocation, + msg.params, + "call to '" + msg.method + "'" + ), + { + name: 'getCurrentMethodInvocationResult', + keyName: 'getCurrentMethodInvocationResult', + } ); - try { - let result; - const resultOrThenable = maybeAuditArgumentChecks( - handler, - invocation, - msg.params, - "call to '" + msg.method + "'" - ); - const isThenable = - resultOrThenable && typeof resultOrThenable.then === 'function'; - if (isThenable) { - result = Meteor._isFibersEnabled ? Promise.await(resultOrThenable) : resultOrThenable; - } else { - result = resultOrThenable; + resolve( + DDPServer._CurrentWriteFence.withValue( + fence, + getCurrentMethodInvocationResult, + { + name: 'DDPServer._CurrentWriteFence', + keyName: '_CurrentWriteFence', } - return result; - } finally { - DDP._CurrentMethodInvocation._set(currentContext); - } - }; - - resolve(DDPServer._CurrentWriteFence.withValue(fence, getCurrentMethodInvocationResult)); + ) + ); }); function finish() { @@ -899,7 +898,7 @@ Object.assign(Session.prototype, { // subs. self._dontStartNewUniversalSubs = false; self.startUniversalSubs(); - }); + }, { name: '_setUserId' }); // Start sending messages again, beginning with the diff from the previous // state of the world to the current state. No yields are allowed during @@ -1120,7 +1119,7 @@ Object.assign(Subscription.prototype, { const self = this; let resultOrThenable = null; try { - resultOrThenable = DDP._CurrentPublicationInvocation.withValueExt( + resultOrThenable = DDP._CurrentPublicationInvocation.withValue( self, () => maybeAuditArgumentChecks( @@ -1807,7 +1806,7 @@ Object.assign(Server.prototype, { }; var connection = null; var currentMethodInvocation = DDP._CurrentMethodInvocation.get(); - var currentPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); + var currentPublicationInvocation = DDP._CurrentPublicationInvocation.get(); var randomSeed = null; if (currentMethodInvocation) { userId = currentMethodInvocation.userId; diff --git a/packages/ddp-server-async/livedata_server_async_tests.js b/packages/ddp-server-async/livedata_server_async_tests.js index 65b8d3b8eb..d66a28f091 100644 --- a/packages/ddp-server-async/livedata_server_async_tests.js +++ b/packages/ddp-server-async/livedata_server_async_tests.js @@ -21,7 +21,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( await sleep(50); var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); - var publicationInvocation = DDP._CurrentPublicationInvocation.getExt(); + var publicationInvocation = DDP._CurrentPublicationInvocation.get(); // console.log('methodInvocation', methodInvocation); // console.log('publicationInvocation', !!publicationInvocation); @@ -34,7 +34,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( // and that it runs with the same environment variables as this publish function. this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); - var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); + var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); callback.call( this, diff --git a/packages/ddp-server-async/livedata_server_tests.js b/packages/ddp-server-async/livedata_server_tests.js index d4e40890d6..101b1c2a93 100644 --- a/packages/ddp-server-async/livedata_server_tests.js +++ b/packages/ddp-server-async/livedata_server_tests.js @@ -182,7 +182,7 @@ Meteor.publish("livedata_server_test_sub_method", async function (connectionId) Meteor.publish("livedata_server_test_sub_context", async function (connectionId, userId) { var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); - var publicationInvocation = DDP._CurrentPublicationInvocation.getExt(); + var publicationInvocation = DDP._CurrentPublicationInvocation.get(); // Check the publish function's environment variables and context. if (callback) { @@ -193,7 +193,7 @@ Meteor.publish("livedata_server_test_sub_context", async function (connectionId, // and that it runs with the same environment variables as this publish function. this.onStop(function () { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); - var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.getExt(); + var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); callback.call(this, onStopMethodInvocation, onStopPublicationInvocation, true); }); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js index 859d767ee0..24e460385e 100644 --- a/packages/meteor/asl-helpers.js +++ b/packages/meteor/asl-helpers.js @@ -17,7 +17,7 @@ Meteor._runAsync = (fn, ctx, store = {}) => { } return global.asyncLocalStorage.run( - { ...Meteor._getAslStore(), ...store }, + store || Meteor._getAslStore(), () => { return fn.call(ctx); } diff --git a/packages/meteor/dynamics_nodejs.js b/packages/meteor/dynamics_nodejs.js index 2171240e51..62ea44205c 100644 --- a/packages/meteor/dynamics_nodejs.js +++ b/packages/meteor/dynamics_nodejs.js @@ -5,6 +5,9 @@ var Fiber = Meteor._isFibersEnabled && Npm.require('fibers'); let nextSlot = 0; let callAsyncMethodRunning = false; +const CURRENT_VALUE_KEY_NAME = 'currentValue'; +const SLOT_CALL_KEY = 'slotCall'; + Meteor._nodeCodeMustBeInFiber = function() { if (!Fiber.current) { throw new Error( @@ -73,56 +76,34 @@ class EnvironmentVariableAsync { } get() { - const currentValue = Meteor._getValueFromAslStore('_meteor_dynamics'); - return currentValue && currentValue[this.slot]; - } - getExt() { - return Meteor._getValueFromAslStore('currentValue'); + if (this.slot !== Meteor._getValueFromAslStore(SLOT_CALL_KEY)) { + return; + } + return Meteor._getValueFromAslStore(CURRENT_VALUE_KEY_NAME); } getOrNullIfOutsideFiber() { return this.get(); } - async withValue(value, func) { - let currentValues = Meteor._getValueFromAslStore('_meteor_dynamics'); - if (!currentValues) { - currentValues = []; - } - - const saved = currentValues[this.slot]; - let ret; - try { - currentValues[this.slot] = value; - Meteor._updateAslStore('_meteor_dynamics', currentValues); - ret = await func(); - } finally { - currentValues[this.slot] = saved; - Meteor._updateAslStore('_meteor_dynamics', currentValues); - } - - return ret; - } - - async withValueExt(value, func, storeOptions = {}) { + async withValue(value, func, options = {}) { return Meteor._runAsync( async () => { let ret; try { - Meteor._updateAslStore('currentValue', value); + Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, value); ret = await func(); } finally { - console.log( - `withValueExt finish running ${Meteor._getValueFromAslStore( - 'callId' - ) || 'no-id'} from met/sub ${Meteor._getValueFromAslStore('name') || - 'no-name'}` - ); + Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, undefined); } return ret; }, this, - { callId: `withValueExt-${this.slot}`, ...storeOptions } + { + callId: `${this.slot}-${Math.random()}`, + [SLOT_CALL_KEY]: this.slot, + ...options, + } ); } @@ -242,8 +223,8 @@ const bindEnvironmentFibers = (func, onException, _this) => { }; const bindEnvironmentAsync = (func, onException, _this) => { - var dynamics = Meteor._getValueFromAslStore('_meteor_dynamics'); - var boundValues = Array.isArray(dynamics) ? dynamics.slice() : []; + const dynamics = Meteor._getValueFromAslStore(CURRENT_VALUE_KEY_NAME); + const currentSlot = Meteor._getValueFromAslStore(SLOT_CALL_KEY); if (!onException || typeof onException === 'string') { var description = onException || 'callback of async function'; @@ -259,21 +240,26 @@ const bindEnvironmentAsync = (func, onException, _this) => { return function(/* arguments */) { var args = Array.prototype.slice.call(arguments); - var runWithEnvironment = async function() { - const savedValues = Meteor._getValueFromAslStore('_meteor_dynamics'); - let ret; - try { - // Need to clone boundValues in case two fibers invoke this - // function at the same time - // TODO -> Probably not needed - Meteor._updateAslStore('_meteor_dynamics', boundValues.slice()); - ret = await func.apply(_this, args); - } catch (e) { - onException(e); - } finally { - Meteor._updateAslStore('_meteor_dynamics', savedValues); - } - return ret; + var runWithEnvironment = function() { + return Meteor._runAsync( + async () => { + let ret; + try { + Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, dynamics); + ret = await func.apply(_this, args); + } catch (e) { + onException(e); + } finally { + Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, undefined); + } + return ret; + }, + _this, + { + callId: `bindEnvironment-${Math.random()}`, + [SLOT_CALL_KEY]: currentSlot, + } + ); }; if (Meteor._getAslStore()) { diff --git a/tools/static-assets/server/boot.js b/tools/static-assets/server/boot.js index 68ae408045..ac69eca005 100644 --- a/tools/static-assets/server/boot.js +++ b/tools/static-assets/server/boot.js @@ -484,13 +484,13 @@ function startServerProcess() { global.asyncLocalStorage = new AsyncLocalStorage(); Profile.run('Server startup', function() { - // TODO the if around loadServerBundles should be enough + // TODO[FIBERS] the if around loadServerBundles should be enough if (IS_FIBERS_ENABLED) { loadServerBundles(); callStartupHooks(); runMain(); } else { - global.asyncLocalStorage.run({}, () => { + global.asyncLocalStorage.run({ level: 'boot' }, () => { loadServerBundles(); callStartupHooks(); runMain(); From 42310a16b40cb7285cbec6cc0c878bdc6ed35ae5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:15:39 -0300 Subject: [PATCH 192/292] docs: reverted comment --- docs/history.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index f5175dcc46..200fbb8bca 100644 --- a/docs/history.md +++ b/docs/history.md @@ -26,7 +26,8 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel - +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel * `meteorjs/babel@7.17.1-beta.0` From 3a05f715e34e3060ed7c158f91b761cd1c597ce2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 30 Nov 2022 18:33:29 -0300 Subject: [PATCH 193/292] Meteor version to 2.9.0-rc.2 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 269724043d..a745ff2a09 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.1', + version: '2.2.6-rc.2', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b67d3499b2..4504397b80 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.1", + version: "1.4.2-rc.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 4b2be2da36..9d16e39572 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.1', + version: '2.3.2-rc.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index fabfb21436..84a3db04a2 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.1' + version: '7.10.1-rc.2' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 6d6dabb8d6..4be7bdf3e7 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.1', + version: '2.2.3-rc.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 21c806c9b4..82464d6f6f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.1' + version: '1.11.2-rc.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 8637c9778a..d208682bf0 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.1' + version: '1.4.1-rc.2' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 80ac52abfe..98b92e06c9 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.1", + version: "1.4.3-rc.2", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 8ac5e1fc74..3a9c51498e 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.1' + version: '1.1.2-rc.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 67fd681235..1d0162691d 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.1' + version: '1.3.2-rc.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index c1745ccdcd..93c42c19fd 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.1', + version: '2.9.0-rc.2', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7c12582e2b..3e8add292a 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.1' + version: '1.10.3-rc.2' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 61aca97318..e105967812 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.1' + version: '1.6.2-rc.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index f6d3418c2f..f5491a17c2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.1' + version: '1.9.1-rc.2' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index a1b167081b..22ffbe3c3d 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.1' + version: '1.16.2-rc.2' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 5d7723d7dc..37f76a34dd 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.1', + version: '4.12.1-rc.2', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4ac0dd16d2..303d259386 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.1" + version: "2.1.3-rc.2" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 8e78ae26c2..38fd7c0ba6 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.1", + version: "1.5.1-rc.2", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 640269624f..f3ed307b75 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.1", + version: "1.3.2-rc.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 2af2cf6bb8..5468b6e4a5 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.1" + version: "3.2.1-rc.2" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index b75d54bed2..fe33229282 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.1", + version: "0.12.2-rc.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index b38e2ba01b..3b2ada0b5b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.1', + version: '1.8.3-rc.2', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index b594f6df81..11a90d313b 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.1' + version: '1.3.1-rc.2' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 4ba792e755..289b44c26a 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.1', + version: '1.3.2-rc.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index b2a9bc96cf..6956b58550 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.1' + version: '1.2.2-rc.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 16b5b90533..188d868745 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.1' + version: '1.3.2-rc.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 40ced291f1..323564066b 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.1', + version: '4.6.4-rc.2', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9dcac977c0..cf7b358d01 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.1", + version: "1.3.2-rc.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index ef786cef8b..7ae088249f 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.1", + "version": "2.9.0-rc.2", "recommended": false, "official": false, "description": "Meteor experimental release" From 5ed7e4d18df3fc2aafcf5f5ba8c555b3249fabd1 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 30 Nov 2022 18:16:57 -0400 Subject: [PATCH 194/292] calling Meteor.callAsync to set userId in test --- packages/ddp-client-async/test/livedata_test_service.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ddp-client-async/test/livedata_test_service.js b/packages/ddp-client-async/test/livedata_test_service.js index db32cf3cc4..9f0c7d1fe4 100644 --- a/packages/ddp-client-async/test/livedata_test_service.js +++ b/packages/ddp-client-async/test/livedata_test_service.js @@ -202,10 +202,10 @@ if (Meteor.isServer) { /// Helper for "livedata - setUserId fails when called on server" if (Meteor.isServer) { - Meteor.startup(function() { + Meteor.startup(async function() { errorThrownWhenCallingSetUserIdDirectlyOnServer = null; try { - Meteor.call('setUserId', '1000'); + await Meteor.callAsync('setUserId', '1000'); } catch (e) { errorThrownWhenCallingSetUserIdDirectlyOnServer = e; } From b2d20f33b9b1b6ada24ee9b02c7e39573ae34065 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 10:57:55 -0300 Subject: [PATCH 195/292] chore: updated package lock --- npm-packages/meteor-babel/package-lock.json | 3880 ++++++++++++++++++- 1 file changed, 3874 insertions(+), 6 deletions(-) diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 8e5d6a7e5d..b3d0d406f2 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,8 +1,3875 @@ { "name": "@meteorjs/babel", - "version": "7.16.0-beta.7", - "lockfileVersion": 1, + "version": "7.17.1-beta.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@meteorjs/babel", + "version": "7.17.1-beta.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-react": "^7.16.7", + "@babel/runtime": "7.17.2", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "@meteorjs/reify": "0.23.0", + "babel-preset-meteor": "^7.10.0", + "babel-preset-minify": "^0.5.1", + "convert-source-map": "^1.6.0", + "lodash": "^4.17.21", + "meteor-babel-helpers": "0.0.3", + "typescript": "~4.6.4" + }, + "devDependencies": { + "@babel/plugin-proposal-decorators": "7.14.5", + "@babel/plugin-syntax-decorators": "7.14.5", + "d3": "4.13.0", + "fibers": "5.0.0", + "meteor-promise": "0.9.0", + "mocha": "6.2.3", + "promise": "8.1.0", + "source-map": "0.6.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", + "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", + "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/@babel/core/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", + "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@meteorjs/reify": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", + "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", + "dependencies": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "magic-string": "^0.25.3", + "periscopic": "^2.0.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@meteorjs/reify/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "node_modules/babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + }, + "node_modules/babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + }, + "node_modules/babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + }, + "node_modules/babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + }, + "node_modules/babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + }, + "node_modules/babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" + }, + "node_modules/babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-dead-code-elimination": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "node_modules/babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + }, + "node_modules/babel-plugin-minify-mangle-names": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", + "dependencies": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + }, + "node_modules/babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" + }, + "node_modules/babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + }, + "node_modules/babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + }, + "node_modules/babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + }, + "node_modules/babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + }, + "node_modules/babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "dependencies": { + "esutils": "^2.0.2" + } + }, + "node_modules/babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + }, + "node_modules/babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + }, + "node_modules/babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + }, + "node_modules/babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + }, + "node_modules/babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + }, + "node_modules/babel-preset-meteor": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", + "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", + "dependencies": { + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13" + } + }, + "node_modules/babel-preset-minify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", + "dependencies": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001248", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", + "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/core-js-compat/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "dev": true, + "dependencies": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + } + }, + "node_modules/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "node_modules/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "node_modules/d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "node_modules/d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "node_modules/d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "node_modules/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "dev": true, + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "node_modules/d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", + "dev": true + }, + "node_modules/d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "node_modules/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "node_modules/d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "node_modules/d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "node_modules/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "node_modules/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "node_modules/d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "node_modules/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", + "dev": true + }, + "node_modules/d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "dev": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "node_modules/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "node_modules/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.793", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", + "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/meteor-babel-helpers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + }, + "node_modules/meteor-promise": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -1073,7 +4940,8 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "requires": {} }, "ansi-colors": { "version": "3.2.3", @@ -2722,9 +6590,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unbox-primitive": { "version": "1.0.1", From 7bda967e2d3266a547c18a0396e6f2b0275526e8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 29 Nov 2022 13:29:24 -0300 Subject: [PATCH 196/292] wip: started working on accounts base --- packages/accounts-base/accounts_client.js | 21 +++++----- packages/accounts-base/accounts_server.js | 49 ++++++++++++----------- packages/accounts-base/server_main.js | 5 ++- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index 842e927ad9..6f3314ad04 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -119,18 +119,21 @@ export class AccountsClient extends AccountsCommon { */ logout(callback) { this._loggingOut.set(true); - this.connection.apply('logout', [], { + + this.connection.applyAsync('logout', [], { + // TODO[FIBERS]: Look this { wait: true } later. wait: true - }, (error, result) => { - this._loggingOut.set(false); - this._loginCallbacksCalled = false; - if (error) { - callback && callback(error); - } else { + }) + .then((result) => { + this._loggingOut.set(false); + this._loginCallbacksCalled = false; this.makeClientLoggedOut(); callback && callback(); - } - }); + }) + .catch((e) => { + this._loggingOut.set(false); + callback && callback(e); + }); } /** diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 2fd0a6d41b..2ad5a2cb83 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -14,6 +14,7 @@ const NonEmptyString = Match.Where(x => { return x.length > 0; }); + /** * @summary Constructor for the `Accounts` namespace on the server. * @locus Server @@ -71,8 +72,6 @@ export class AccountsServer extends AccountsCommon { // list of all registered handlers. this._loginHandlers = []; - - setupUsersCollection(this.users); setupDefaultLoginHandlers(this); setExpireTokensInterval(this); @@ -126,6 +125,10 @@ export class AccountsServer extends AccountsCommon { return currentInvocation.userId; } + async init() { + await setupUsersCollection(this.users); + } + /// /// LOGIN HOOKS /// @@ -259,11 +262,11 @@ export class AccountsServer extends AccountsCommon { }); }; - _successfulLogout(connection, userId) { + async _successfulLogout(connection, userId) { // don't fetch the user object unless there are some callbacks registered let user; - this._onLogoutHook.each(callback => { - if (!user && userId) user = this.users.findOne(userId, {fields: this._options.defaultFieldSelector}); + await this._onLogoutHook.forEachAsync(async callback => { + if (!user && userId) user = await this.users.findOne(userId, { fields: this._options.defaultFieldSelector }); callback({ user, connection }); return true; }); @@ -615,8 +618,8 @@ export class AccountsServer extends AccountsCommon { // Any connections associated with old-style unhashed tokens will be // in the process of becoming associated with hashed tokens and then // they'll get closed. - destroyToken(userId, loginToken) { - this.users.update(userId, { + async destroyToken(userId, loginToken) { + await this.users.update(userId, { $pull: { "services.resume.loginTokens": { $or: [ @@ -653,13 +656,13 @@ export class AccountsServer extends AccountsCommon { return await accounts._attemptLogin(this, "login", arguments, result); }; - methods.logout = function () { + methods.logout = async function () { const token = accounts._getLoginToken(this.connection.id); accounts._setLoginToken(this.userId, this.connection, null); if (token && this.userId) { - accounts.destroyToken(this.userId, token); + await accounts.destroyToken(this.userId, token); } - accounts._successfulLogout(this.connection, this.userId); + await accounts._successfulLogout(this.connection, this.userId); this.setUserId(null); }; @@ -671,8 +674,8 @@ export class AccountsServer extends AccountsCommon { // @returns Object // If successful, returns { token: , id: , // tokenExpires: }. - methods.getNewToken = function () { - const user = accounts.users.findOne(this.userId, { + methods.getNewToken = async function () { + const user = await accounts.users.findOne(this.userId, { fields: { "services.resume.loginTokens": 1 } }); if (! this.userId || ! user) { @@ -972,7 +975,7 @@ export class AccountsServer extends AccountsCommon { // already -- in this case we just clean up the observe that we started). const myObserveNumber = ++this._nextUserObserveNumber; this._userObservesForConnections[connection.id] = myObserveNumber; - Meteor.defer(() => { + Meteor.defer(async () => { // If something else happened on this connection in the meantime (it got // closed, or another call to _setLoginToken happened), just do // nothing. We don't need to start an observe for an old connection or old @@ -985,7 +988,7 @@ export class AccountsServer extends AccountsCommon { // Because we upgrade unhashed login tokens to hashed tokens at // login time, sessions will only be logged in with a hashed // token. Thus we only need to observe hashed tokens here. - const observe = this.users.find({ + const observe = await this.users.find({ _id: userId, 'services.resume.loginTokens.hashedToken': newToken }, { fields: { _id: 1 } }).observeChanges({ @@ -1747,7 +1750,7 @@ function defaultValidateNewUserHook(user) { } } -const setupUsersCollection = users => { +const setupUsersCollection = async users => { /// /// RESTRICTING WRITES TO USER OBJECTS /// @@ -1773,21 +1776,21 @@ const setupUsersCollection = users => { }); /// DEFAULT INDEXES ON USERS - users.createIndex('username', { unique: true, sparse: true }); - users.createIndex('emails.address', { unique: true, sparse: true }); - users.createIndex('services.resume.loginTokens.hashedToken', + await users.createIndex('username', { unique: true, sparse: true }); + await users.createIndex('emails.address', { unique: true, sparse: true }); + await users.createIndex('services.resume.loginTokens.hashedToken', { unique: true, sparse: true }); - users.createIndex('services.resume.loginTokens.token', + await users.createIndex('services.resume.loginTokens.token', { unique: true, sparse: true }); // For taking care of logoutOtherClients calls that crashed before the // tokens were deleted. - users.createIndex('services.resume.haveLoginTokensToDelete', + await users.createIndex('services.resume.haveLoginTokensToDelete', { sparse: true }); // For expiring login tokens - users.createIndex("services.resume.loginTokens.when", { sparse: true }); + await users.createIndex("services.resume.loginTokens.when", { sparse: true }); // For expiring password tokens - users.createIndex('services.password.reset.when', { sparse: true }); - users.createIndex('services.password.enroll.when', { sparse: true }); + await users.createIndex('services.password.reset.when', { sparse: true }); + await users.createIndex('services.password.enroll.when', { sparse: true }); }; diff --git a/packages/accounts-base/server_main.js b/packages/accounts-base/server_main.js index db5020fed5..05ec621117 100644 --- a/packages/accounts-base/server_main.js +++ b/packages/accounts-base/server_main.js @@ -5,7 +5,8 @@ import { AccountsServer } from "./accounts_server.js"; * @summary The namespace for all server-side accounts-related methods. */ Accounts = new AccountsServer(Meteor.server); - +// TODO[FIBERS]: I need TLA +Accounts.init().then() // Users table. Don't use the normal autopublish, since we want to hide // some fields. Code to autopublish this is in accounts_server.js. // XXX Allow users to configure this collection name. @@ -15,7 +16,7 @@ Accounts = new AccountsServer(Meteor.server); * @locus Anywhere * @type {Mongo.Collection} * @importFromPackage meteor -*/ + */ Meteor.users = Accounts.users; export { From e152d385fff9e3e912cd5ab3354a0fa6d5db3eef Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:16:11 -0300 Subject: [PATCH 197/292] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.3?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index a745ff2a09..db751f370c 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.2', + version: '2.2.6-rc.3', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 4504397b80..93f7c89bae 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.2", + version: "1.4.2-rc.3", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 9d16e39572..b67228177d 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.2', + version: '2.3.2-rc.3', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 84a3db04a2..d87cf61dad 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.2' + version: '7.10.1-rc.3' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 4be7bdf3e7..7a33dd7500 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.2', + version: '2.2.3-rc.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 82464d6f6f..b998d4d748 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.2' + version: '1.11.2-rc.3' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index d208682bf0..b9b14358fd 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.2' + version: '1.4.1-rc.3' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 98b92e06c9..80b825eca3 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.2", + version: "1.4.3-rc.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 3a9c51498e..0aecf043d0 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.2' + version: '1.1.2-rc.3' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 1d0162691d..3ab475b9db 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.2' + version: '1.3.2-rc.3' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 93c42c19fd..e55a225bce 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.2', + version: '2.9.0-rc.3', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 3e8add292a..cec6a5024f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.2' + version: '1.10.3-rc.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index e105967812..471affdd36 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.2' + version: '1.6.2-rc.3' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index f5491a17c2..9ccf14201d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.2' + version: '1.9.1-rc.3' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 22ffbe3c3d..b4f5175887 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.2' + version: '1.16.2-rc.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 37f76a34dd..d94df22844 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.2', + version: '4.12.1-rc.3', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 303d259386..468a124a4a 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.2" + version: "2.1.3-rc.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 38fd7c0ba6..b08c02a44d 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.2", + version: "1.5.1-rc.3", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index f3ed307b75..e84518b7d5 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.2", + version: "1.3.2-rc.3", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 5468b6e4a5..b9126c14f7 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.2" + version: "3.2.1-rc.3" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index fe33229282..2a1cf5fd07 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.2", + version: "0.12.2-rc.3", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 3b2ada0b5b..e7f9a2a15d 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.2', + version: '1.8.3-rc.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 11a90d313b..8d43c9d7fd 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.2' + version: '1.3.1-rc.3' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 289b44c26a..02b49bc817 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.2', + version: '1.3.2-rc.3', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 6956b58550..667cf41732 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.2' + version: '1.2.2-rc.3' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 188d868745..f340073e9a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.2' + version: '1.3.2-rc.3' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 323564066b..9d933c5aaa 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.2', + version: '4.6.4-rc.3', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index cf7b358d01..6fa4d73f99 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.2", + version: "1.3.2-rc.3", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 7ae088249f..ea5f0127e6 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.2", + "version": "2.9.0-rc.3", "recommended": false, "official": false, "description": "Meteor experimental release" From 4053f55616f0b46d1483669609197d3ab731c85f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:32:57 -0300 Subject: [PATCH 198/292] Meteor version to 2.9.0-rc.4 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index db751f370c..46da70e8f9 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.3', + version: '2.2.6-rc.4', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 93f7c89bae..e60d26a1a3 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.3", + version: "1.4.2-rc.4", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index b67228177d..23a0c65fd6 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.3', + version: '2.3.2-rc.4', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index d87cf61dad..859782395e 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.3' + version: '7.10.1-rc.4' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 7a33dd7500..bc92a5e1cf 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.3', + version: '2.2.3-rc.4', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index b998d4d748..55235872d7 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.3' + version: '1.11.2-rc.4' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index b9b14358fd..2cf6dc3f87 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.3' + version: '1.4.1-rc.4' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 80b825eca3..6d6b9e3e6f 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.3", + version: "1.4.3-rc.4", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 0aecf043d0..379e802c1a 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.3' + version: '1.1.2-rc.4' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 3ab475b9db..bbdac3edd6 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.3' + version: '1.3.2-rc.4' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index e55a225bce..da33fb6d26 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.3', + version: '2.9.0-rc.4', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index cec6a5024f..be4212d4da 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.3' + version: '1.10.3-rc.4' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 471affdd36..d64fb9b335 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.3' + version: '1.6.2-rc.4' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9ccf14201d..960d0ec951 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.3' + version: '1.9.1-rc.4' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index b4f5175887..a0539d0ed7 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.3' + version: '1.16.2-rc.4' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index d94df22844..ab0ed14753 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.3', + version: '4.12.1-rc.4', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 468a124a4a..2cf15788c7 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.3" + version: "2.1.3-rc.4" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index b08c02a44d..fc8c7aa1ad 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.3", + version: "1.5.1-rc.4", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index e84518b7d5..a2a8dcbf8e 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.3", + version: "1.3.2-rc.4", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index b9126c14f7..8846076fa6 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.3" + version: "3.2.1-rc.4" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 2a1cf5fd07..8f58c63280 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.3", + version: "0.12.2-rc.4", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index e7f9a2a15d..b63a2fa48b 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.3', + version: '1.8.3-rc.4', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 8d43c9d7fd..4ac9ab852f 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.3' + version: '1.3.1-rc.4' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 02b49bc817..b379e4ddf8 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.3', + version: '1.3.2-rc.4', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 667cf41732..1f1c144a48 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.3' + version: '1.2.2-rc.4' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index f340073e9a..add0d7ff72 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.3' + version: '1.3.2-rc.4' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 9d933c5aaa..0a4c79ebdf 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.3', + version: '4.6.4-rc.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 6fa4d73f99..b10da0d720 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.3", + version: "1.3.2-rc.4", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index ea5f0127e6..e419ea413c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.3", + "version": "2.9.0-rc.4", "recommended": false, "official": false, "description": "Meteor experimental release" From 060d181870417831d42ba22c161b2941141b89c5 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 1 Dec 2022 16:46:57 -0300 Subject: [PATCH 199/292] Meteor version to 2.9.0-rc.5 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 46da70e8f9..afd49c426f 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.4', + version: '2.2.6-rc.5', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index e60d26a1a3..467e7d5707 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.4", + version: "1.4.2-rc.5", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 23a0c65fd6..1adafeab07 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.4', + version: '2.3.2-rc.5', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 859782395e..39066adca4 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.4' + version: '7.10.1-rc.5' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index bc92a5e1cf..3c3342e02d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.4', + version: '2.2.3-rc.5', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 55235872d7..9346ebc94e 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.4' + version: '1.11.2-rc.5' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2cf6dc3f87..b3b8dd634a 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.4' + version: '1.4.1-rc.5' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 6d6b9e3e6f..a730a9cc22 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.4", + version: "1.4.3-rc.5", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 379e802c1a..340b1ac80f 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.4' + version: '1.1.2-rc.5' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index bbdac3edd6..37602091d7 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.4' + version: '1.3.2-rc.5' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index da33fb6d26..99121891fe 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.4', + version: '2.9.0-rc.5', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index be4212d4da..b8d4b9e806 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.4' + version: '1.10.3-rc.5' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index d64fb9b335..1706c51fd6 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.4' + version: '1.6.2-rc.5' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 960d0ec951..9ce8ac7c0c 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.4' + version: '1.9.1-rc.5' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index a0539d0ed7..ebd5a494b0 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.4' + version: '1.16.2-rc.5' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index ab0ed14753..b9e33d1685 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.4', + version: '4.12.1-rc.5', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 2cf15788c7..81ef4c021b 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.4" + version: "2.1.3-rc.5" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index fc8c7aa1ad..50d6bf5bed 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.4", + version: "1.5.1-rc.5", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index a2a8dcbf8e..9ddb66a4d7 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.4", + version: "1.3.2-rc.5", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 8846076fa6..8baa509e4c 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.4" + version: "3.2.1-rc.5" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 8f58c63280..035c42cbce 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.4", + version: "0.12.2-rc.5", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index b63a2fa48b..68d390ac82 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.4', + version: '1.8.3-rc.5', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 4ac9ab852f..de372d620f 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.4' + version: '1.3.1-rc.5' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index b379e4ddf8..20bc22d4c4 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.4', + version: '1.3.2-rc.5', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 1f1c144a48..7e582bd11c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.4' + version: '1.2.2-rc.5' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index add0d7ff72..621466f534 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.4' + version: '1.3.2-rc.5' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 0a4c79ebdf..03b0750e1e 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.4', + version: '4.6.4-rc.5', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index b10da0d720..7df587a1b1 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.4", + version: "1.3.2-rc.5", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e419ea413c..a155cacdd1 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.4", + "version": "2.9.0-rc.5", "recommended": false, "official": false, "description": "Meteor experimental release" From dba13e5c1a7b4dfe74b190928bbc9ea36fdc5b58 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:18:04 -0300 Subject: [PATCH 200/292] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.6?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index afd49c426f..2516a1d427 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc.5', + version: '2.2.6-rc290.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 467e7d5707..bcf9090c87 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc.5", + version: "1.4.2-rc290.6", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 1adafeab07..0d67e5d397 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc.5', + version: '2.3.2-rc290.6', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 39066adca4..7bfeb7f297 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc.5' + version: '7.10.1-rc290.6' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 3c3342e02d..a231dfeae7 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc.5', + version: '2.2.3-rc290.6', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 9346ebc94e..cb34e18e87 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc.5' + version: '1.11.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index b3b8dd634a..175e0a4e76 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc.5' + version: '1.4.1-rc290.6' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index a730a9cc22..1638d25d02 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc.5", + version: "1.4.3-rc290.6", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 340b1ac80f..1eaa1661bd 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc.5' + version: '1.1.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 37602091d7..e22ec70c1b 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc.5' + version: '1.3.2-rc290.6' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 99121891fe..959a1ac36f 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.5', + version: '2.9.0-rc.6', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index b8d4b9e806..e3385827f3 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc.5' + version: '1.10.3-rc290.6' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 1706c51fd6..ee14df2e61 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc.5' + version: '1.6.2-rc290.6' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9ce8ac7c0c..4cf6e30562 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc.5' + version: '1.9.1-rc290.6' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ebd5a494b0..8b31a877ba 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc.5' + version: '1.16.2-rc290.6' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index b9e33d1685..5d591f1b1d 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc.5', + version: '4.12.1-rc290.6', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 81ef4c021b..6ef459e69f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc.5" + version: "2.1.3-rc290.6" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 50d6bf5bed..f364637d73 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc.5", + version: "1.5.1-rc290.6", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 9ddb66a4d7..74d60a7a4f 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc.5", + version: "1.3.2-rc290.6", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 8baa509e4c..fb2e2c00ee 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc.5" + version: "3.2.1-rc290.6" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 035c42cbce..bee5601c95 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc.5", + version: "0.12.2-rc290.6", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 68d390ac82..ee72dc0902 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc.5', + version: '1.8.3-rc290.6', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index de372d620f..08d05bd11a 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc.5' + version: '1.3.1-rc290.6' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 20bc22d4c4..b1659071fd 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc.5', + version: '1.3.2-rc290.6', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 7e582bd11c..483d37289a 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc.5' + version: '1.2.2-rc290.6' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 621466f534..e2ac973c5b 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc.5' + version: '1.3.2-rc290.6' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 03b0750e1e..5f5ca367db 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc.5', + version: '4.6.4-rc290.6', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 7df587a1b1..609cbd752c 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc.5", + version: "1.3.2-rc290.6", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index a155cacdd1..4223d3dc80 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.5", + "version": "2.9.0-rc.6", "recommended": false, "official": false, "description": "Meteor experimental release" From 1fb05e690a6d89ff4462bf5500628fa3b8fcf9f3 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:30:51 -0300 Subject: [PATCH 201/292] =?UTF-8?q?Meteor=20version=20to=202.9.0-rc.7?= =?UTF-8?q?=C2=A0:comet:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 2516a1d427..dcdc58c2ee 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.6', + version: '2.2.6-rc290.7', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index bcf9090c87..04bbfceae2 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.6", + version: "1.4.2-rc290.7", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 0d67e5d397..a5d24bbe3c 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.6', + version: '2.3.2-rc290.7', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 7bfeb7f297..717e778c48 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.6' + version: '7.10.1-rc290.7' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index a231dfeae7..2c8b006712 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.6', + version: '2.2.3-rc290.7', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index cb34e18e87..6ac254e556 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.6' + version: '1.11.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 175e0a4e76..50f370f7da 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.6' + version: '1.4.1-rc290.7' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 1638d25d02..cffda28899 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.6", + version: "1.4.3-rc290.7", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 1eaa1661bd..1578dbfaaa 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.6' + version: '1.1.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index e22ec70c1b..859fdd1846 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.6' + version: '1.3.2-rc290.7' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 959a1ac36f..12c31fe115 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.6', + version: '2.9.0-rc.7', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index e3385827f3..444d4c49b7 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.6' + version: '1.10.3-rc290.7' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index ee14df2e61..c63b886fe2 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.6' + version: '1.6.2-rc290.7' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 4cf6e30562..c0f42a0d12 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.6' + version: '1.9.1-rc290.7' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 8b31a877ba..662de1284e 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.6' + version: '1.16.2-rc290.7' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 5d591f1b1d..2a52644f14 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.6', + version: '4.12.1-rc290.7', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 6ef459e69f..7723135d7f 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.6" + version: "2.1.3-rc290.7" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index f364637d73..242421fd7f 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.6", + version: "1.5.1-rc290.7", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 74d60a7a4f..9729b96902 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.6", + version: "1.3.2-rc290.7", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index fb2e2c00ee..fcd069c272 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.6" + version: "3.2.1-rc290.7" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bee5601c95..e700a53b4e 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.6", + version: "0.12.2-rc290.7", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index ee72dc0902..0a54e6fc3c 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.6', + version: '1.8.3-rc290.7', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 08d05bd11a..ea199e48f4 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.6' + version: '1.3.1-rc290.7' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index b1659071fd..41ce488257 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.6', + version: '1.3.2-rc290.7', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 483d37289a..73022d23d9 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.6' + version: '1.2.2-rc290.7' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index e2ac973c5b..5b0702df96 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.6' + version: '1.3.2-rc290.7' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 5f5ca367db..1813238194 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.6', + version: '4.6.4-rc290.7', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 609cbd752c..4136341306 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.6", + version: "1.3.2-rc290.7", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 4223d3dc80..5bae73e5b9 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.6", + "version": "2.9.0-rc.7", "recommended": false, "official": false, "description": "Meteor experimental release" From 28361eee67c2dfe19d11987dec0db4beab762367 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Fri, 2 Dec 2022 21:48:47 +0700 Subject: [PATCH 202/292] update 2.8-migration.md, fix typo --- guide/source/2.8-migration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/source/2.8-migration.md b/guide/source/2.8-migration.md index 1e1ccb4a8b..8d89edf12f 100644 --- a/guide/source/2.8-migration.md +++ b/guide/source/2.8-migration.md @@ -157,7 +157,7 @@ As `callAsync` returns a promise, it'll be solved in the future. So you need to It's also important to understand what will happen if you call an async method with `Meteor.call`, and vice versa. -If you can an async method with `Meteor.call` in the client, and you don't have the package `insecure` on your project, an error like this will be thrown: +If you call an async method with `Meteor.call` in the client, and you don't have the package `insecure` on your project, an error like this will be thrown: From e35c182d4c5f2e2e4d7b0435bc5bca928cbc45b7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 11:54:16 -0300 Subject: [PATCH 203/292] Meteor version to 2.9.0-rc.7 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- tools/packaging/package-client.js | 3 ++- 30 files changed, 31 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index dcdc58c2ee..07a2809ded 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.7', + version: '2.2.6-rc290.8', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 04bbfceae2..5475ad7a28 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.7", + version: "1.4.2-rc290.8", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index a5d24bbe3c..9294ae2449 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.7', + version: '2.3.2-rc290.8', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 717e778c48..2b0736b1e5 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.7' + version: '7.10.1-rc290.8' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 2c8b006712..5402ccba27 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.7', + version: '2.2.3-rc290.8', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 6ac254e556..8a03bcd57f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.7' + version: '1.11.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 50f370f7da..8d90874afb 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.7' + version: '1.4.1-rc290.8' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index cffda28899..7aa89700c0 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.7", + version: "1.4.3-rc290.8", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 1578dbfaaa..564bfea927 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.7' + version: '1.1.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 859fdd1846..d9f681d428 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.7' + version: '1.3.2-rc290.8' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 12c31fe115..4a1d440a7e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.7', + version: '2.9.0-rc.8', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 444d4c49b7..58692bce87 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.7' + version: '1.10.3-rc290.8' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index c63b886fe2..4140534a7b 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.7' + version: '1.6.2-rc290.8' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index c0f42a0d12..bd9f421c5f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.7' + version: '1.9.1-rc290.8' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 662de1284e..f6427562ee 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.7' + version: '1.16.2-rc290.8' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 2a52644f14..7237cba836 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.7', + version: '4.12.1-rc290.8', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 7723135d7f..9bce2dbc03 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.7" + version: "2.1.3-rc290.8" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 242421fd7f..cec51732f4 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.7", + version: "1.5.1-rc290.8", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 9729b96902..2c97c91826 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.7", + version: "1.3.2-rc290.8", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index fcd069c272..4f0b33d677 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.7" + version: "3.2.1-rc290.8" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index e700a53b4e..f75624bb27 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.7", + version: "0.12.2-rc290.8", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 0a54e6fc3c..3b2717ad26 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.7', + version: '1.8.3-rc290.8', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index ea199e48f4..60a1d789a6 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.7' + version: '1.3.1-rc290.8' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 41ce488257..0d9db0ec90 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.7', + version: '1.3.2-rc290.8', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 73022d23d9..89b1031fc2 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.7' + version: '1.2.2-rc290.8' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 5b0702df96..faf2ae233d 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.7' + version: '1.3.2-rc290.8' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 1813238194..28c33cf702 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.7', + version: '4.6.4-rc290.8', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 4136341306..2340c02251 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.7", + version: "1.3.2-rc290.8", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 5bae73e5b9..e916ee9c2a 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.7", + "version": "2.9.0-rc.8", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 78af222cfd..1649ab6212 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,7 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - + console.log(JSON.stringify(uploadInfo)) // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { @@ -820,6 +820,7 @@ exports.publishPackage = function (options) { } buildmessage.enterJob("uploading source", function () { + console.log(JSON.stringify(uploadInfo)) uploadFile(uploadInfo.uploadUrl, sourceBundleResult.sourceTarball); }); if (buildmessage.jobHasMessages()) { From 539ef5ddf6ba2fbada85473eeb7ed14d1013c153 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 12:06:52 -0300 Subject: [PATCH 204/292] chore: removed logs --- tools/packaging/package-client.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 1649ab6212..3075970647 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,6 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - console.log(JSON.stringify(uploadInfo)) // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { @@ -820,7 +819,6 @@ exports.publishPackage = function (options) { } buildmessage.enterJob("uploading source", function () { - console.log(JSON.stringify(uploadInfo)) uploadFile(uploadInfo.uploadUrl, sourceBundleResult.sourceTarball); }); if (buildmessage.jobHasMessages()) { From bbe159edae20ed4593e3a897cc9767abb0367547 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Fri, 2 Dec 2022 14:41:01 -0300 Subject: [PATCH 205/292] Meteor version to 2.9.0-rc.9 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 07a2809ded..7213f5f9bc 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.8', + version: '2.2.6-rc290.9', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 5475ad7a28..b4ff252406 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.8", + version: "1.4.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 9294ae2449..c706bf0c25 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.8', + version: '2.3.2-rc290.9', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 2b0736b1e5..cd6e31c746 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.8' + version: '7.10.1-rc290.9' }); Npm.depends({ diff --git a/packages/email/package.js b/packages/email/package.js index 5402ccba27..35b97f5ade 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.8', + version: '2.2.3-rc290.9', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 8a03bcd57f..85e29c433a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.8' + version: '1.11.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 8d90874afb..e2df30d6f8 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.8' + version: '1.4.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 7aa89700c0..4719cc5fe7 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.8", + version: "1.4.3-rc290.9", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 564bfea927..f7f81f07f7 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.8' + version: '1.1.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d9f681d428..d59db10e79 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.8' + version: '1.3.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 4a1d440a7e..8604dbc9ae 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.8', + version: '2.9.0-rc.9', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 58692bce87..8df4c3400d 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.8' + version: '1.10.3-rc290.9' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 4140534a7b..6fd362836d 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.8' + version: '1.6.2-rc290.9' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index bd9f421c5f..567889b2e2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.8' + version: '1.9.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f6427562ee..457dc1ad34 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2-rc290.8' + version: '1.16.3-rc290.9' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 7237cba836..05e860f139 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.8', + version: '4.12.1-rc290.9', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 9bce2dbc03..5c82c54e57 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.8" + version: "2.1.3-rc290.9" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index cec51732f4..9f3a4f4543 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.8", + version: "1.5.1-rc290.9", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 2c97c91826..1d9ad78afb 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.8", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4f0b33d677..26f0938117 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.8" + version: "3.2.1-rc290.9" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index f75624bb27..434358825b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.8", + version: "0.12.2-rc290.9", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 3b2717ad26..82b8848839 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.8', + version: '1.8.3-rc290.9', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 60a1d789a6..421eeadf32 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.8' + version: '1.3.1-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 0d9db0ec90..722d3c7250 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.8', + version: '1.3.2-rc290.9', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 89b1031fc2..8f731c5e2c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.8' + version: '1.2.2-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index faf2ae233d..05bd32186a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.8' + version: '1.3.2-rc290.9' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 28c33cf702..21052010f4 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.8', + version: '4.6.4-rc290.9', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 2340c02251..9f4b7f643b 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.8", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e916ee9c2a..596b7d924c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.8", + "version": "2.9.0-rc.9", "recommended": false, "official": false, "description": "Meteor experimental release" From 5a165057d8def0ed613a0e549b70a9b9c20afd6f Mon Sep 17 00:00:00 2001 From: arggh <17210302+arggh@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:57:26 +0200 Subject: [PATCH 206/292] Handle array item updates --- packages/mongo/oplog_v2_converter.js | 15 +++++ packages/mongo/oplog_v2_converter_tests.js | 65 ++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 952a37478f..35f289a0f8 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -46,6 +46,12 @@ function isArrayOperator(operator) { return operator.a === true && Object.keys(operator).every(isArrayOperatorKey); } +const arrayUpdateRegex = /^(u\d+)$/; + +function isArrayUpdate(operator) { + return arrayUpdateRegex.test(operator); +} + function flattenObjectInto(target, source, prefix) { if (Array.isArray(source) || typeof source !== 'object' || source === null) { target[prefix] = source; @@ -85,6 +91,15 @@ function convertOplogDiff(oplogEntry, diff, prefix) { Object.entries(value).forEach(([key, value]) => { oplogEntry.$set[join(prefix, key)] = value; }); + } else if (isArrayUpdate(diffKey)) { + const positionKey = join(prefix, diffKey.slice(1)); + if (value === null) { + oplogEntry.$unset ??= {}; + oplogEntry.$unset[positionKey] = true; + } else { + oplogEntry.$set ??= {}; + oplogEntry.$set[positionKey] = value; + } } else { // Handle s-fields. const key = diffKey.slice(1); diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index f87c8877f3..79bcbada93 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,6 +77,71 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], + [ + { + $v: 2, + diff: { + sitems: { + a: true, + s0: { + u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, + sbio: { u: { en: 'Just Alice' } }, + slanguages: { + a: true, + s0: { + u: { englishName: 'English', key: 'en', localName: 'English' }, + }, + }, + }, + u1: { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { en: 'Fictional character', sv: '' }, + bio: { en: 'Just Bob', sv: '' }, + avatar: null, + languages: [ + { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, + ], + }, + u2: null + }, + }, + }, + { + $v: 2, + $set: { + 'items.0.id': 'm57DsX8g8L66bM5JX', + 'items.0.name': 'Alice', + 'items.0.bio.en': 'Just Alice', + 'items.0.languages.0.englishName': 'English', + 'items.0.languages.0.key': 'en', + 'items.0.languages.0.localName': 'English', + 'items.1': { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { + en: 'Fictional character', + sv: '', + }, + bio: { + en: 'Just Bob', + sv: '', + }, + avatar: null, + languages: [ + { + key: 'sv', + englishName: 'Swedish', + localName: 'Sverige', + }, + ], + }, + }, + $unset: { + 'items.2': true + } + }, + ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { From fb40d960b8b806f599830ed4049dd1300752f50f Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 5 Dec 2022 10:11:41 -0400 Subject: [PATCH 207/292] ddp-server and ddp-client are now ddp-server-legacy and ddp-client-server ddp-server-async and ddp-client-async are now ddp-server and ddp-client --- .../ddp-client-async/.npm/package/.gitignore | 1 - packages/ddp-client-async/.npm/package/README | 7 - .../.npm/package/npm-shrinkwrap.json | 25 -- .../README.md | 0 .../client/client.js | 0 .../client/client_convenience.js | 0 .../common/MethodInvoker.js | 0 .../common/livedata_connection.js | 50 ++-- .../common/namespace.js | 0 .../package.js | 2 +- .../server/server.js | 0 .../test/livedata_connection_tests.js | 0 .../test/livedata_test_service.js | 4 +- .../test/livedata_tests.js | 0 .../test/random_stream_tests.js | 0 .../test/stub_stream.js | 0 .../ddp-client/common/livedata_connection.js | 50 ++-- packages/ddp-client/package.js | 7 +- .../ddp-client/test/livedata_test_service.js | 4 +- .../ddp-server-async/.npm/package/.gitignore | 1 - packages/ddp-server-async/.npm/package/README | 7 - .../.npm/package/npm-shrinkwrap.json | 45 ---- packages/ddp-server-async/writefence.js | 125 ---------- .../README.md | 0 .../crossbar.js | 0 .../crossbar_tests.js | 0 .../livedata_server.js | 149 +++++------ .../livedata_server_async_tests.js | 5 +- .../livedata_server_tests.js | 64 +++-- .../package.js | 0 .../server_convenience.js | 0 .../session_view_tests.js | 0 .../stream_server.js | 0 packages/ddp-server-legacy/writefence.js | 131 ++++++++++ packages/ddp-server/livedata_server.js | 149 ++++++----- .../ddp-server/livedata_server_async_tests.js | 5 +- packages/ddp-server/livedata_server_tests.js | 64 ++--- packages/ddp-server/package.js | 5 - packages/ddp-server/writefence.js | 232 +++++++++--------- 39 files changed, 518 insertions(+), 614 deletions(-) delete mode 100644 packages/ddp-client-async/.npm/package/.gitignore delete mode 100644 packages/ddp-client-async/.npm/package/README delete mode 100644 packages/ddp-client-async/.npm/package/npm-shrinkwrap.json rename packages/{ddp-client-async => ddp-client-legacy}/README.md (100%) rename packages/{ddp-client-async => ddp-client-legacy}/client/client.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/client/client_convenience.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/common/MethodInvoker.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/common/livedata_connection.js (98%) rename packages/{ddp-client-async => ddp-client-legacy}/common/namespace.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/package.js (98%) rename packages/{ddp-client-async => ddp-client-legacy}/server/server.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/test/livedata_connection_tests.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/test/livedata_test_service.js (99%) rename packages/{ddp-client-async => ddp-client-legacy}/test/livedata_tests.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/test/random_stream_tests.js (100%) rename packages/{ddp-client-async => ddp-client-legacy}/test/stub_stream.js (100%) delete mode 100644 packages/ddp-server-async/.npm/package/.gitignore delete mode 100644 packages/ddp-server-async/.npm/package/README delete mode 100644 packages/ddp-server-async/.npm/package/npm-shrinkwrap.json delete mode 100644 packages/ddp-server-async/writefence.js rename packages/{ddp-server-async => ddp-server-legacy}/README.md (100%) rename packages/{ddp-server-async => ddp-server-legacy}/crossbar.js (100%) rename packages/{ddp-server-async => ddp-server-legacy}/crossbar_tests.js (100%) rename packages/{ddp-server-async => ddp-server-legacy}/livedata_server.js (96%) rename packages/{ddp-server-async => ddp-server-legacy}/livedata_server_async_tests.js (96%) rename packages/{ddp-server-async => ddp-server-legacy}/livedata_server_tests.js (84%) rename packages/{ddp-server-async => ddp-server-legacy}/package.js (100%) rename packages/{ddp-server-async => ddp-server-legacy}/server_convenience.js (100%) rename packages/{ddp-server-async => ddp-server-legacy}/session_view_tests.js (100%) rename packages/{ddp-server-async => ddp-server-legacy}/stream_server.js (100%) create mode 100644 packages/ddp-server-legacy/writefence.js diff --git a/packages/ddp-client-async/.npm/package/.gitignore b/packages/ddp-client-async/.npm/package/.gitignore deleted file mode 100644 index 3c3629e647..0000000000 --- a/packages/ddp-client-async/.npm/package/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/packages/ddp-client-async/.npm/package/README b/packages/ddp-client-async/.npm/package/README deleted file mode 100644 index 3d492553a4..0000000000 --- a/packages/ddp-client-async/.npm/package/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory and the files immediately inside it are automatically generated -when you change this package's NPM dependencies. Commit the files in this -directory (npm-shrinkwrap.json, .gitignore, and this README) to source control -so that others run the same versions of sub-dependencies. - -You should NOT check in the node_modules directory that Meteor automatically -creates; if you are using git, the .gitignore file tells git to ignore it. diff --git a/packages/ddp-client-async/.npm/package/npm-shrinkwrap.json b/packages/ddp-client-async/.npm/package/npm-shrinkwrap.json deleted file mode 100644 index 28feb731a6..0000000000 --- a/packages/ddp-client-async/.npm/package/npm-shrinkwrap.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "lockfileVersion": 1, - "dependencies": { - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" - }, - "@sinonjs/fake-timers": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.0.5.tgz", - "integrity": "sha512-fUt6b15bjV/VW93UP5opNXJxdwZSbK1EdiwnhN7XrQrcpaOhMJpZ/CjwFpM3THpxwA+YviBUJKSuEqKlCK5alw==" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - } - } -} diff --git a/packages/ddp-client-async/README.md b/packages/ddp-client-legacy/README.md similarity index 100% rename from packages/ddp-client-async/README.md rename to packages/ddp-client-legacy/README.md diff --git a/packages/ddp-client-async/client/client.js b/packages/ddp-client-legacy/client/client.js similarity index 100% rename from packages/ddp-client-async/client/client.js rename to packages/ddp-client-legacy/client/client.js diff --git a/packages/ddp-client-async/client/client_convenience.js b/packages/ddp-client-legacy/client/client_convenience.js similarity index 100% rename from packages/ddp-client-async/client/client_convenience.js rename to packages/ddp-client-legacy/client/client_convenience.js diff --git a/packages/ddp-client-async/common/MethodInvoker.js b/packages/ddp-client-legacy/common/MethodInvoker.js similarity index 100% rename from packages/ddp-client-async/common/MethodInvoker.js rename to packages/ddp-client-legacy/common/MethodInvoker.js diff --git a/packages/ddp-client-async/common/livedata_connection.js b/packages/ddp-client-legacy/common/livedata_connection.js similarity index 98% rename from packages/ddp-client-async/common/livedata_connection.js rename to packages/ddp-client-legacy/common/livedata_connection.js index 1855a0e0f5..868201c43d 100644 --- a/packages/ddp-client-async/common/livedata_connection.js +++ b/packages/ddp-client-legacy/common/livedata_connection.js @@ -606,12 +606,14 @@ export class Connection { DDP._CurrentMethodInvocation._set(); DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(true); return new Promise((resolve, reject) => { - this.applyAsync(name, args, { isFromCallAsync: true }) - .then(result => { - DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); - resolve(result); - }) - .catch(reject); + this.applyAsync(name, args, { isFromCallAsync: true }, (err, result) => { + DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); + if (err) { + reject(err); + return; + } + resolve(result); + }); }); } @@ -667,8 +669,9 @@ export class Connection { * @param {Boolean} options.noRetry (Client only) if true, don't send this method again on reload, simply call the callback an error with the error code 'invocation-failed'. * @param {Boolean} options.throwStubExceptions (Client only) If true, exceptions thrown by method stubs will be thrown instead of logged, and the method will not be invoked on the server. * @param {Boolean} options.returnStubValue (Client only) If true then in cases where we would have otherwise discarded the stub's return value and returned undefined, instead we go ahead and return it. Specifically, this is any time other than when (a) we are already inside a stub or (b) we are in Node and no callback was provided. Currently we require this flag to be explicitly passed to reduce the likelihood that stub return values will be confused with server return values; we may improve this in future. + * @param {Function} [asyncCallback] Optional callback. */ - async applyAsync(name, args, options) { + async applyAsync(name, args, options, callback) { const { stubInvocation, invocation, ...stubOptions } = this._stubCall(name, EJSON.clone(args), options); if (stubOptions.hasStub) { if ( @@ -692,7 +695,14 @@ export class Connection { invocation ); try { - stubOptions.stubReturnValue = await stubInvocation(); + const resultOrThenable = stubInvocation(); + const isThenable = + resultOrThenable && typeof resultOrThenable.then === 'function'; + if (isThenable) { + stubOptions.stubReturnValue = await resultOrThenable; + } else { + stubOptions.stubReturnValue = resultOrThenable; + } } finally { DDP._CurrentMethodInvocation._set(currentContext); } @@ -700,7 +710,7 @@ export class Connection { stubOptions.exception = e; } } - return this._apply(name, stubOptions, args, options, null); + return this._apply(name, stubOptions, args, options, callback); } _apply(name, stubCallValue, args, options, callback) { @@ -800,24 +810,8 @@ export class Connection { } else { // On the server, make the function synchronous. Throw on // errors, return on success. - // TODO fibers: before this was a future, now it's a promise. - // Do more tests around this. - - if (!options.isFromCallAsync) { - throw new Error("Can't create a future for Meteor.call()"); - } - - future = new Promise((resolve, reject) => { - callback = (...allArgs) => { - let args = Array.from(allArgs); - let err = args.shift(); - if (err) { - reject(err); - return; - } - resolve(...args); - } - }); + future = new Future(); + callback = future.resolver(); } } @@ -862,7 +856,7 @@ export class Connection { // If we're using the default callback on the server, // block waiting for the result. if (future) { - return future; + return future.wait(); } return options.returnStubValue ? stubReturnValue : undefined; } diff --git a/packages/ddp-client-async/common/namespace.js b/packages/ddp-client-legacy/common/namespace.js similarity index 100% rename from packages/ddp-client-async/common/namespace.js rename to packages/ddp-client-legacy/common/namespace.js diff --git a/packages/ddp-client-async/package.js b/packages/ddp-client-legacy/package.js similarity index 98% rename from packages/ddp-client-async/package.js rename to packages/ddp-client-legacy/package.js index 0cdc77a953..5a0b31737f 100644 --- a/packages/ddp-client-async/package.js +++ b/packages/ddp-client-legacy/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.0', + version: '2.6.1', documentation: null }); diff --git a/packages/ddp-client-async/server/server.js b/packages/ddp-client-legacy/server/server.js similarity index 100% rename from packages/ddp-client-async/server/server.js rename to packages/ddp-client-legacy/server/server.js diff --git a/packages/ddp-client-async/test/livedata_connection_tests.js b/packages/ddp-client-legacy/test/livedata_connection_tests.js similarity index 100% rename from packages/ddp-client-async/test/livedata_connection_tests.js rename to packages/ddp-client-legacy/test/livedata_connection_tests.js diff --git a/packages/ddp-client-async/test/livedata_test_service.js b/packages/ddp-client-legacy/test/livedata_test_service.js similarity index 99% rename from packages/ddp-client-async/test/livedata_test_service.js rename to packages/ddp-client-legacy/test/livedata_test_service.js index 9f0c7d1fe4..db32cf3cc4 100644 --- a/packages/ddp-client-async/test/livedata_test_service.js +++ b/packages/ddp-client-legacy/test/livedata_test_service.js @@ -202,10 +202,10 @@ if (Meteor.isServer) { /// Helper for "livedata - setUserId fails when called on server" if (Meteor.isServer) { - Meteor.startup(async function() { + Meteor.startup(function() { errorThrownWhenCallingSetUserIdDirectlyOnServer = null; try { - await Meteor.callAsync('setUserId', '1000'); + Meteor.call('setUserId', '1000'); } catch (e) { errorThrownWhenCallingSetUserIdDirectlyOnServer = e; } diff --git a/packages/ddp-client-async/test/livedata_tests.js b/packages/ddp-client-legacy/test/livedata_tests.js similarity index 100% rename from packages/ddp-client-async/test/livedata_tests.js rename to packages/ddp-client-legacy/test/livedata_tests.js diff --git a/packages/ddp-client-async/test/random_stream_tests.js b/packages/ddp-client-legacy/test/random_stream_tests.js similarity index 100% rename from packages/ddp-client-async/test/random_stream_tests.js rename to packages/ddp-client-legacy/test/random_stream_tests.js diff --git a/packages/ddp-client-async/test/stub_stream.js b/packages/ddp-client-legacy/test/stub_stream.js similarity index 100% rename from packages/ddp-client-async/test/stub_stream.js rename to packages/ddp-client-legacy/test/stub_stream.js diff --git a/packages/ddp-client/common/livedata_connection.js b/packages/ddp-client/common/livedata_connection.js index 868201c43d..1855a0e0f5 100644 --- a/packages/ddp-client/common/livedata_connection.js +++ b/packages/ddp-client/common/livedata_connection.js @@ -606,14 +606,12 @@ export class Connection { DDP._CurrentMethodInvocation._set(); DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(true); return new Promise((resolve, reject) => { - this.applyAsync(name, args, { isFromCallAsync: true }, (err, result) => { - DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); - if (err) { - reject(err); - return; - } - resolve(result); - }); + this.applyAsync(name, args, { isFromCallAsync: true }) + .then(result => { + DDP._CurrentMethodInvocation._setCallAsyncMethodRunning(false); + resolve(result); + }) + .catch(reject); }); } @@ -669,9 +667,8 @@ export class Connection { * @param {Boolean} options.noRetry (Client only) if true, don't send this method again on reload, simply call the callback an error with the error code 'invocation-failed'. * @param {Boolean} options.throwStubExceptions (Client only) If true, exceptions thrown by method stubs will be thrown instead of logged, and the method will not be invoked on the server. * @param {Boolean} options.returnStubValue (Client only) If true then in cases where we would have otherwise discarded the stub's return value and returned undefined, instead we go ahead and return it. Specifically, this is any time other than when (a) we are already inside a stub or (b) we are in Node and no callback was provided. Currently we require this flag to be explicitly passed to reduce the likelihood that stub return values will be confused with server return values; we may improve this in future. - * @param {Function} [asyncCallback] Optional callback. */ - async applyAsync(name, args, options, callback) { + async applyAsync(name, args, options) { const { stubInvocation, invocation, ...stubOptions } = this._stubCall(name, EJSON.clone(args), options); if (stubOptions.hasStub) { if ( @@ -695,14 +692,7 @@ export class Connection { invocation ); try { - const resultOrThenable = stubInvocation(); - const isThenable = - resultOrThenable && typeof resultOrThenable.then === 'function'; - if (isThenable) { - stubOptions.stubReturnValue = await resultOrThenable; - } else { - stubOptions.stubReturnValue = resultOrThenable; - } + stubOptions.stubReturnValue = await stubInvocation(); } finally { DDP._CurrentMethodInvocation._set(currentContext); } @@ -710,7 +700,7 @@ export class Connection { stubOptions.exception = e; } } - return this._apply(name, stubOptions, args, options, callback); + return this._apply(name, stubOptions, args, options, null); } _apply(name, stubCallValue, args, options, callback) { @@ -810,8 +800,24 @@ export class Connection { } else { // On the server, make the function synchronous. Throw on // errors, return on success. - future = new Future(); - callback = future.resolver(); + // TODO fibers: before this was a future, now it's a promise. + // Do more tests around this. + + if (!options.isFromCallAsync) { + throw new Error("Can't create a future for Meteor.call()"); + } + + future = new Promise((resolve, reject) => { + callback = (...allArgs) => { + let args = Array.from(allArgs); + let err = args.shift(); + if (err) { + reject(err); + return; + } + resolve(...args); + } + }); } } @@ -856,7 +862,7 @@ export class Connection { // If we're using the default callback on the server, // block waiting for the result. if (future) { - return future.wait(); + return future; } return options.returnStubValue ? stubReturnValue : undefined; } diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 8c41b99c1c..0cdc77a953 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.6.1', + version: '2.6.0', documentation: null }); @@ -9,11 +9,6 @@ Npm.depends({ }); Package.onUse((api) => { - if (process.env.DISABLE_FIBERS) { - api.use('ddp-client-async'); - api.export('DDP', 'server'); - return; - } api.use([ 'check', 'random', diff --git a/packages/ddp-client/test/livedata_test_service.js b/packages/ddp-client/test/livedata_test_service.js index db32cf3cc4..9f0c7d1fe4 100644 --- a/packages/ddp-client/test/livedata_test_service.js +++ b/packages/ddp-client/test/livedata_test_service.js @@ -202,10 +202,10 @@ if (Meteor.isServer) { /// Helper for "livedata - setUserId fails when called on server" if (Meteor.isServer) { - Meteor.startup(function() { + Meteor.startup(async function() { errorThrownWhenCallingSetUserIdDirectlyOnServer = null; try { - Meteor.call('setUserId', '1000'); + await Meteor.callAsync('setUserId', '1000'); } catch (e) { errorThrownWhenCallingSetUserIdDirectlyOnServer = e; } diff --git a/packages/ddp-server-async/.npm/package/.gitignore b/packages/ddp-server-async/.npm/package/.gitignore deleted file mode 100644 index 3c3629e647..0000000000 --- a/packages/ddp-server-async/.npm/package/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/packages/ddp-server-async/.npm/package/README b/packages/ddp-server-async/.npm/package/README deleted file mode 100644 index 3d492553a4..0000000000 --- a/packages/ddp-server-async/.npm/package/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory and the files immediately inside it are automatically generated -when you change this package's NPM dependencies. Commit the files in this -directory (npm-shrinkwrap.json, .gitignore, and this README) to source control -so that others run the same versions of sub-dependencies. - -You should NOT check in the node_modules directory that Meteor automatically -creates; if you are using git, the .gitignore file tells git to ignore it. diff --git a/packages/ddp-server-async/.npm/package/npm-shrinkwrap.json b/packages/ddp-server-async/.npm/package/npm-shrinkwrap.json deleted file mode 100644 index b9b024674c..0000000000 --- a/packages/ddp-server-async/.npm/package/npm-shrinkwrap.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "lockfileVersion": 1, - "dependencies": { - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==" - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - }, - "permessage-deflate": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/permessage-deflate/-/permessage-deflate-0.1.7.tgz", - "integrity": "sha512-EUNi/RIsyJ1P1u9QHFwMOUWMYetqlE22ZgGbad7YP856WF4BFF0B7DuNy6vEGsgNNud6c/SkdWzkne71hH8MjA==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==" - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - } - } -} diff --git a/packages/ddp-server-async/writefence.js b/packages/ddp-server-async/writefence.js deleted file mode 100644 index d85f028ff8..0000000000 --- a/packages/ddp-server-async/writefence.js +++ /dev/null @@ -1,125 +0,0 @@ -// A write fence collects a group of writes, and provides a callback -// when all of the writes are fully committed and propagated (all -// observers have been notified of the write and acknowledged it.) -// -DDPServer._WriteFence = class { - constructor() { - this.armed = false; - this.fired = false; - this.retired = false; - this.outstanding_writes = 0; - this.before_fire_callbacks = []; - this.completion_callbacks = []; - } - - // Start tracking a write, and return an object to represent it. The - // object has a single method, committed(). This method should be - // called when the write is fully committed and propagated. You can - // continue to add writes to the WriteFence up until it is triggered - // (calls its callbacks because all writes have committed.) - beginWrite() { - if (this.retired) - return { committed: function () {} }; - - if (this.fired) - throw new Error("fence has already activated -- too late to add writes"); - - this.outstanding_writes++; - let committed = false; - const _committedFn = async () => { - if (committed) - throw new Error("committed called twice on the same write"); - committed = true; - this.outstanding_writes--; - await this._maybeFire(); - }; - - const self = this; - return { - committed: Meteor._isFibersEnabled ? () => Promise.await(_committedFn.apply(self)) : _committedFn, - }; - } - - // Arm the fence. Once the fence is armed, and there are no more - // uncommitted writes, it will activate. - arm() { - if (this === DDPServer._CurrentWriteFence.get()) - throw Error("Can't arm the current fence"); - this.armed = true; - return Meteor._isFibersEnabled ? Promise.await(this._maybeFire()) : this._maybeFire(); - } - - // Register a function to be called once before firing the fence. - // Callback function can add new writes to the fence, in which case - // it won't fire until those writes are done as well. - onBeforeFire(func) { - if (this.fired) - throw new Error("fence has already activated -- too late to " + - "add a callback"); - this.before_fire_callbacks.push(func); - } - - // Register a function to be called when the fence fires. - onAllCommitted(func) { - if (this.fired) - throw new Error("fence has already activated -- too late to " + - "add a callback"); - this.completion_callbacks.push(func); - } - - _armAndWait() { - let resolver; - const returnValue = new Promise(r => resolver = r); - this.onAllCommitted(resolver); - this.arm(); - - return returnValue; - } - // Convenience function. Arms the fence, then blocks until it fires. - armAndWait() { - return Meteor._isFibersEnabled ? Promise.await(this._armAndWait()) : this._armAndWait(); - } - - async _maybeFire() { - if (this.fired) - throw new Error("write fence already activated?"); - if (this.armed && !this.outstanding_writes) { - const invokeCallback = async (func) => { - try { - await func(this); - } catch (err) { - Meteor._debug("exception in write fence callback:", err); - } - }; - - this.outstanding_writes++; - while (this.before_fire_callbacks.length > 0) { - const cb = this.before_fire_callbacks.shift(); - await invokeCallback(cb); - } - this.outstanding_writes--; - - if (!this.outstanding_writes) { - this.fired = true; - while (this.completion_callbacks.length > 0) { - const cb = this.completion_callbacks.shift(); - await invokeCallback(cb); - } - } - } - } - - // Deactivate this fence so that adding more writes has no effect. - // The fence must have already fired. - retire() { - if (!this.fired) - throw new Error("Can't retire a fence that hasn't fired."); - this.retired = true; - } -}; - -// The current write fence. When there is a current write fence, code -// that writes to databases should register their writes with it using -// beginWrite(). -// -DDPServer._CurrentWriteFence = new Meteor.EnvironmentVariable; diff --git a/packages/ddp-server-async/README.md b/packages/ddp-server-legacy/README.md similarity index 100% rename from packages/ddp-server-async/README.md rename to packages/ddp-server-legacy/README.md diff --git a/packages/ddp-server-async/crossbar.js b/packages/ddp-server-legacy/crossbar.js similarity index 100% rename from packages/ddp-server-async/crossbar.js rename to packages/ddp-server-legacy/crossbar.js diff --git a/packages/ddp-server-async/crossbar_tests.js b/packages/ddp-server-legacy/crossbar_tests.js similarity index 100% rename from packages/ddp-server-async/crossbar_tests.js rename to packages/ddp-server-legacy/crossbar_tests.js diff --git a/packages/ddp-server-async/livedata_server.js b/packages/ddp-server-legacy/livedata_server.js similarity index 96% rename from packages/ddp-server-async/livedata_server.js rename to packages/ddp-server-legacy/livedata_server.js index 9cadd4d4ee..3b4853c39e 100644 --- a/packages/ddp-server-async/livedata_server.js +++ b/packages/ddp-server-legacy/livedata_server.js @@ -1,5 +1,7 @@ DDPServer = {}; +var Fiber = Npm.require('fibers'); + // Publication strategies define how we handle data from published cursors at the collection level // This allows someone to: // - Choose a trade-off between client-server bandwidth and server memory usage @@ -328,9 +330,9 @@ var Session = function (server, version, socket, options) { self.send({ msg: 'connected', session: self.id }); // On initial connect, spin up all the universal publishers. - Meteor._runAsync(function() { + Fiber(function () { self.startUniversalSubs(); - }); + }).run(); if (version !== 'pre1' && options.heartbeatInterval !== 0) { // We no longer need the low level timeout because we have heartbeats. @@ -555,10 +557,10 @@ Object.assign(Session.prototype, { // Any message counts as receiving a pong, as it demonstrates that // the client is still alive. if (self.heartbeat) { - Meteor._runAsync(function() { + Fiber(function () { self.heartbeat.messageReceived(); - }); - }; + }).run(); + } if (self.version !== 'pre1' && msg_in.msg === 'ping') { if (self._respondToPings) @@ -582,7 +584,7 @@ Object.assign(Session.prototype, { return; } - function runHandlers() { + Fiber(function () { var blocked = true; var unblock = function () { @@ -602,9 +604,7 @@ Object.assign(Session.prototype, { else self.sendError('Bad request', msg); unblock(); // in case the handler didn't already do it - } - - Meteor._runAsync(runHandlers); + }).run(); }; processNext(); @@ -762,32 +762,33 @@ Object.assign(Session.prototype, { } } - const getCurrentMethodInvocationResult = () => - DDP._CurrentPublicationInvocation.withValue( - invocation, - () => - maybeAuditArgumentChecks( - handler, - invocation, - msg.params, - "call to '" + msg.method + "'" - ), - { - name: 'getCurrentMethodInvocationResult', - keyName: 'getCurrentMethodInvocationResult', - } + const getCurrentMethodInvocationResult = () => { + const currentContext = DDP._CurrentMethodInvocation._setNewContextAndGetCurrent( + invocation ); - resolve( - DDPServer._CurrentWriteFence.withValue( - fence, - getCurrentMethodInvocationResult, - { - name: 'DDPServer._CurrentWriteFence', - keyName: '_CurrentWriteFence', + try { + let result; + const resultOrThenable = maybeAuditArgumentChecks( + handler, + invocation, + msg.params, + "call to '" + msg.method + "'" + ); + const isThenable = + resultOrThenable && typeof resultOrThenable.then === 'function'; + if (isThenable) { + result = Promise.await(resultOrThenable); + } else { + result = resultOrThenable; } - ) - ); + return result; + } finally { + DDP._CurrentMethodInvocation._set(currentContext); + } + }; + + resolve(DDPServer._CurrentWriteFence.withValue(fence, getCurrentMethodInvocationResult)); }); function finish() { @@ -898,7 +899,7 @@ Object.assign(Session.prototype, { // subs. self._dontStartNewUniversalSubs = false; self.startUniversalSubs(); - }, { name: '_setUserId' }); + }); // Start sending messages again, beginning with the diff from the previous // state of the world to the current state. No yields are allowed during @@ -1119,19 +1120,16 @@ Object.assign(Subscription.prototype, { const self = this; let resultOrThenable = null; try { - resultOrThenable = DDP._CurrentPublicationInvocation.withValue( - self, - () => - maybeAuditArgumentChecks( - self._handler, - self, - EJSON.clone(self._params), - // It's OK that this would look weird for universal subscriptions, - // because they have no arguments so there can never be an - // audit-argument-checks failure. - "publisher '" + self._name + "'" - ), - { name: self._name } + resultOrThenable = DDP._CurrentPublicationInvocation.withValue(self, () => + maybeAuditArgumentChecks( + self._handler, + self, + EJSON.clone(self._params), + // It's OK that this would look weird for universal subscriptions, + // because they have no arguments so there can never be an + // audit-argument-checks failure. + "publisher '" + self._name + "'" + ) ); } catch (e) { self.error(e); @@ -1154,7 +1152,6 @@ Object.assign(Subscription.prototype, { } else { self._publishHandlerResult(resultOrThenable); } - }, _publishHandlerResult: function (res) { @@ -1180,21 +1177,15 @@ Object.assign(Subscription.prototype, { return c && c._publishCursor; }; if (isCursor(res)) { - if (Meteor._isFibersEnabled) { - try { - res._publishCursor(self); - } catch (e) { - self.error(e); - return; - } - // _publishCursor only returns after the initial added callbacks have run. - // mark subscription as ready. - self.ready(); - } else { - res._publishCursor(self).then(() => { - self.ready(); - }).catch((e) => self.error(e)); + try { + res._publishCursor(self); + } catch (e) { + self.error(e); + return; } + // _publishCursor only returns after the initial added callbacks have run. + // mark subscription as ready. + self.ready(); } else if (_.isArray(res)) { // Check all the elements are cursors if (! _.all(res, isCursor)) { @@ -1216,21 +1207,15 @@ Object.assign(Subscription.prototype, { collectionNames[collectionName] = true; }; - if (Meteor._isFibersEnabled) { - try { - _.each(res, function (cur) { - cur._publishCursor(self); - }); - } catch (e) { - self.error(e); - return; - } - self.ready(); - } else { - Promise.all(res.map((c) => c._publishCursor(self))).then(() => { - self.ready(); - }).catch((e) => self.error(e)); + try { + _.each(res, function (cur) { + cur._publishCursor(self); + }); + } catch (e) { + self.error(e); + return; } + self.ready(); } else if (res) { // Truthy values other than cursors or arrays are probably a // user mistake (possible returning a Mongo document via, say, @@ -1507,11 +1492,9 @@ Server = function (options = {}) { sendError("Already connected", msg); return; } - - Meteor._runAsync(function() { + Fiber(function () { self._handleConnect(socket, msg); - }) - + }).run(); return; } @@ -1528,9 +1511,9 @@ Server = function (options = {}) { socket.on('close', function () { if (socket._meteorSession) { - Meteor._runAsync(function() { + Fiber(function () { socket._meteorSession.close(); - }); + }).run(); } }); }); @@ -1708,9 +1691,9 @@ Object.assign(Server.prototype, { // self.sessions to change while we're running this loop. self.sessions.forEach(function (session) { if (!session._dontStartNewUniversalSubs) { - Meteor._runAsync(function() { + Fiber(function() { session._startSubscription(handler); - }); + }).run(); } }); } diff --git a/packages/ddp-server-async/livedata_server_async_tests.js b/packages/ddp-server-legacy/livedata_server_async_tests.js similarity index 96% rename from packages/ddp-server-async/livedata_server_async_tests.js rename to packages/ddp-server-legacy/livedata_server_async_tests.js index d66a28f091..d145aeee92 100644 --- a/packages/ddp-server-async/livedata_server_async_tests.js +++ b/packages/ddp-server-legacy/livedata_server_async_tests.js @@ -23,8 +23,6 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); -// console.log('methodInvocation', methodInvocation); -// console.log('publicationInvocation', !!publicationInvocation); // Check the publish function's environment variables and context. if (callback) { callback.call(this, methodInvocation, publicationInvocation); @@ -35,7 +33,6 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); - callback.call( this, onStopMethodInvocation, @@ -48,7 +45,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.stop(); } else { this.ready(); - await Meteor.callAsync('livedata_server_test_setuserid', userId); + Meteor.call('livedata_server_test_setuserid', userId); } }); diff --git a/packages/ddp-server-async/livedata_server_tests.js b/packages/ddp-server-legacy/livedata_server_tests.js similarity index 84% rename from packages/ddp-server-async/livedata_server_tests.js rename to packages/ddp-server-legacy/livedata_server_tests.js index 101b1c2a93..cde56b6196 100644 --- a/packages/ddp-server-async/livedata_server_tests.js +++ b/packages/ddp-server-legacy/livedata_server_tests.js @@ -87,8 +87,8 @@ Meteor.methods({ return this.connection && this.connection.id; }, - livedata_server_test_outer: async function () { - return await Meteor.callAsync('livedata_server_test_inner'); + livedata_server_test_outer: function () { + return Meteor.call('livedata_server_test_inner'); }, livedata_server_test_setuserid: function (userId) { @@ -108,17 +108,12 @@ Tinytest.addAsync( }); makeTestConnection( - test, - function(clientConn, serverConn) { - clientConn - .callAsync('livedata_server_test_inner') - .then(() => clientConn.disconnect()) - .catch(e => { - onComplete(); - throw new Meteor.Error(e); - }); - }, - onComplete + test, + function (clientConn, serverConn) { + clientConn.call('livedata_server_test_inner'); + clientConn.disconnect(); + }, + onComplete ); } ); @@ -130,11 +125,10 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - clientConn.callAsync('livedata_server_test_inner').then(res => { - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); - }); + var res = clientConn.call('livedata_server_test_inner'); + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); }, onComplete ); @@ -148,11 +142,10 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - clientConn.callAsync('livedata_server_test_outer').then(res => { - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); - }); + var res = clientConn.call('livedata_server_test_outer'); + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); }, onComplete ); @@ -170,16 +163,16 @@ Meteor.publish("livedata_server_test_sub", function (connectionId) { this.stop(); }); -Meteor.publish("livedata_server_test_sub_method", async function (connectionId) { +Meteor.publish("livedata_server_test_sub_method", function (connectionId) { var callback = onSubscription[connectionId]; if (callback) { - var id = await Meteor.callAsync('livedata_server_test_inner'); + var id = Meteor.call('livedata_server_test_inner'); callback(id); } this.stop(); }); -Meteor.publish("livedata_server_test_sub_context", async function (connectionId, userId) { +Meteor.publish("livedata_server_test_sub_context", function (connectionId, userId) { var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); @@ -201,7 +194,7 @@ Meteor.publish("livedata_server_test_sub_context", async function (connectionId, this.stop(); } else { this.ready(); - await Meteor.callAsync('livedata_server_test_setuserid', userId); + Meteor.call('livedata_server_test_setuserid', userId); } }); @@ -318,13 +311,13 @@ Tinytest.addAsync( ); Meteor.methods({ - async testResolvedPromise(arg) { - const invocationRunningFromCallAsync1 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); + testResolvedPromise(arg) { + const invocation1 = DDP._CurrentMethodInvocation.get(); return Promise.resolve(arg).then(result => { - const invocationRunningFromCallAsync2 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); - // What matters here is that both invocations are coming from the same call, - // so both of them can be considered a simulation. - if (invocationRunningFromCallAsync1 !== invocationRunningFromCallAsync2) { + const invocation2 = DDP._CurrentMethodInvocation.get(); + // This equality holds because Promise callbacks are bound to the + // dynamic environment where .then was called. + if (invocation1 !== invocation2) { throw new Meteor.Error("invocation mismatch"); } return result + " after waiting"; @@ -351,10 +344,9 @@ Meteor.methods({ Tinytest.addAsync( "livedata server - waiting for Promise", - (test, onComplete) => makeTestConnection(test, async (clientConn, serverConn) => { - const testResolvedPromiseResult = await clientConn.callAsync("testResolvedPromise", "clientConn.call"); + (test, onComplete) => makeTestConnection(test, (clientConn, serverConn) => { test.equal( - testResolvedPromiseResult, + clientConn.call("testResolvedPromise", "clientConn.call"), "clientConn.call after waiting" ); diff --git a/packages/ddp-server-async/package.js b/packages/ddp-server-legacy/package.js similarity index 100% rename from packages/ddp-server-async/package.js rename to packages/ddp-server-legacy/package.js diff --git a/packages/ddp-server-async/server_convenience.js b/packages/ddp-server-legacy/server_convenience.js similarity index 100% rename from packages/ddp-server-async/server_convenience.js rename to packages/ddp-server-legacy/server_convenience.js diff --git a/packages/ddp-server-async/session_view_tests.js b/packages/ddp-server-legacy/session_view_tests.js similarity index 100% rename from packages/ddp-server-async/session_view_tests.js rename to packages/ddp-server-legacy/session_view_tests.js diff --git a/packages/ddp-server-async/stream_server.js b/packages/ddp-server-legacy/stream_server.js similarity index 100% rename from packages/ddp-server-async/stream_server.js rename to packages/ddp-server-legacy/stream_server.js diff --git a/packages/ddp-server-legacy/writefence.js b/packages/ddp-server-legacy/writefence.js new file mode 100644 index 0000000000..e9310c9f7f --- /dev/null +++ b/packages/ddp-server-legacy/writefence.js @@ -0,0 +1,131 @@ +var Future = Npm.require('fibers/future'); + +// A write fence collects a group of writes, and provides a callback +// when all of the writes are fully committed and propagated (all +// observers have been notified of the write and acknowledged it.) +// +DDPServer._WriteFence = function () { + var self = this; + + self.armed = false; + self.fired = false; + self.retired = false; + self.outstanding_writes = 0; + self.before_fire_callbacks = []; + self.completion_callbacks = []; +}; + +// The current write fence. When there is a current write fence, code +// that writes to databases should register their writes with it using +// beginWrite(). +// +DDPServer._CurrentWriteFence = new Meteor.EnvironmentVariable; + +_.extend(DDPServer._WriteFence.prototype, { + // Start tracking a write, and return an object to represent it. The + // object has a single method, committed(). This method should be + // called when the write is fully committed and propagated. You can + // continue to add writes to the WriteFence up until it is triggered + // (calls its callbacks because all writes have committed.) + beginWrite: function () { + var self = this; + + if (self.retired) + return { committed: function () {} }; + + if (self.fired) + throw new Error("fence has already activated -- too late to add writes"); + + self.outstanding_writes++; + var committed = false; + return { + committed: function () { + if (committed) + throw new Error("committed called twice on the same write"); + committed = true; + self.outstanding_writes--; + self._maybeFire(); + } + }; + }, + + // Arm the fence. Once the fence is armed, and there are no more + // uncommitted writes, it will activate. + arm: function () { + var self = this; + if (self === DDPServer._CurrentWriteFence.get()) + throw Error("Can't arm the current fence"); + self.armed = true; + self._maybeFire(); + }, + + // Register a function to be called once before firing the fence. + // Callback function can add new writes to the fence, in which case + // it won't fire until those writes are done as well. + onBeforeFire: function (func) { + var self = this; + if (self.fired) + throw new Error("fence has already activated -- too late to " + + "add a callback"); + self.before_fire_callbacks.push(func); + }, + + // Register a function to be called when the fence fires. + onAllCommitted: function (func) { + var self = this; + if (self.fired) + throw new Error("fence has already activated -- too late to " + + "add a callback"); + self.completion_callbacks.push(func); + }, + + // Convenience function. Arms the fence, then blocks until it fires. + armAndWait: function () { + var self = this; + var future = new Future; + self.onAllCommitted(function () { + future['return'](); + }); + self.arm(); + future.wait(); + }, + + _maybeFire: function () { + var self = this; + if (self.fired) + throw new Error("write fence already activated?"); + if (self.armed && !self.outstanding_writes) { + function invokeCallback (func) { + try { + func(self); + } catch (err) { + Meteor._debug("exception in write fence callback", err); + } + } + + self.outstanding_writes++; + while (self.before_fire_callbacks.length > 0) { + var callbacks = self.before_fire_callbacks; + self.before_fire_callbacks = []; + _.each(callbacks, invokeCallback); + } + self.outstanding_writes--; + + if (!self.outstanding_writes) { + self.fired = true; + var callbacks = self.completion_callbacks; + self.completion_callbacks = []; + _.each(callbacks, invokeCallback); + } + } + }, + + // Deactivate this fence so that adding more writes has no effect. + // The fence must have already fired. + retire: function () { + var self = this; + if (! self.fired) + throw new Error("Can't retire a fence that hasn't fired."); + self.retired = true; + } +}); diff --git a/packages/ddp-server/livedata_server.js b/packages/ddp-server/livedata_server.js index 3b4853c39e..9cadd4d4ee 100644 --- a/packages/ddp-server/livedata_server.js +++ b/packages/ddp-server/livedata_server.js @@ -1,7 +1,5 @@ DDPServer = {}; -var Fiber = Npm.require('fibers'); - // Publication strategies define how we handle data from published cursors at the collection level // This allows someone to: // - Choose a trade-off between client-server bandwidth and server memory usage @@ -330,9 +328,9 @@ var Session = function (server, version, socket, options) { self.send({ msg: 'connected', session: self.id }); // On initial connect, spin up all the universal publishers. - Fiber(function () { + Meteor._runAsync(function() { self.startUniversalSubs(); - }).run(); + }); if (version !== 'pre1' && options.heartbeatInterval !== 0) { // We no longer need the low level timeout because we have heartbeats. @@ -557,10 +555,10 @@ Object.assign(Session.prototype, { // Any message counts as receiving a pong, as it demonstrates that // the client is still alive. if (self.heartbeat) { - Fiber(function () { + Meteor._runAsync(function() { self.heartbeat.messageReceived(); - }).run(); - } + }); + }; if (self.version !== 'pre1' && msg_in.msg === 'ping') { if (self._respondToPings) @@ -584,7 +582,7 @@ Object.assign(Session.prototype, { return; } - Fiber(function () { + function runHandlers() { var blocked = true; var unblock = function () { @@ -604,7 +602,9 @@ Object.assign(Session.prototype, { else self.sendError('Bad request', msg); unblock(); // in case the handler didn't already do it - }).run(); + } + + Meteor._runAsync(runHandlers); }; processNext(); @@ -762,33 +762,32 @@ Object.assign(Session.prototype, { } } - const getCurrentMethodInvocationResult = () => { - const currentContext = DDP._CurrentMethodInvocation._setNewContextAndGetCurrent( - invocation + const getCurrentMethodInvocationResult = () => + DDP._CurrentPublicationInvocation.withValue( + invocation, + () => + maybeAuditArgumentChecks( + handler, + invocation, + msg.params, + "call to '" + msg.method + "'" + ), + { + name: 'getCurrentMethodInvocationResult', + keyName: 'getCurrentMethodInvocationResult', + } ); - try { - let result; - const resultOrThenable = maybeAuditArgumentChecks( - handler, - invocation, - msg.params, - "call to '" + msg.method + "'" - ); - const isThenable = - resultOrThenable && typeof resultOrThenable.then === 'function'; - if (isThenable) { - result = Promise.await(resultOrThenable); - } else { - result = resultOrThenable; + resolve( + DDPServer._CurrentWriteFence.withValue( + fence, + getCurrentMethodInvocationResult, + { + name: 'DDPServer._CurrentWriteFence', + keyName: '_CurrentWriteFence', } - return result; - } finally { - DDP._CurrentMethodInvocation._set(currentContext); - } - }; - - resolve(DDPServer._CurrentWriteFence.withValue(fence, getCurrentMethodInvocationResult)); + ) + ); }); function finish() { @@ -899,7 +898,7 @@ Object.assign(Session.prototype, { // subs. self._dontStartNewUniversalSubs = false; self.startUniversalSubs(); - }); + }, { name: '_setUserId' }); // Start sending messages again, beginning with the diff from the previous // state of the world to the current state. No yields are allowed during @@ -1120,16 +1119,19 @@ Object.assign(Subscription.prototype, { const self = this; let resultOrThenable = null; try { - resultOrThenable = DDP._CurrentPublicationInvocation.withValue(self, () => - maybeAuditArgumentChecks( - self._handler, - self, - EJSON.clone(self._params), - // It's OK that this would look weird for universal subscriptions, - // because they have no arguments so there can never be an - // audit-argument-checks failure. - "publisher '" + self._name + "'" - ) + resultOrThenable = DDP._CurrentPublicationInvocation.withValue( + self, + () => + maybeAuditArgumentChecks( + self._handler, + self, + EJSON.clone(self._params), + // It's OK that this would look weird for universal subscriptions, + // because they have no arguments so there can never be an + // audit-argument-checks failure. + "publisher '" + self._name + "'" + ), + { name: self._name } ); } catch (e) { self.error(e); @@ -1152,6 +1154,7 @@ Object.assign(Subscription.prototype, { } else { self._publishHandlerResult(resultOrThenable); } + }, _publishHandlerResult: function (res) { @@ -1177,15 +1180,21 @@ Object.assign(Subscription.prototype, { return c && c._publishCursor; }; if (isCursor(res)) { - try { - res._publishCursor(self); - } catch (e) { - self.error(e); - return; + if (Meteor._isFibersEnabled) { + try { + res._publishCursor(self); + } catch (e) { + self.error(e); + return; + } + // _publishCursor only returns after the initial added callbacks have run. + // mark subscription as ready. + self.ready(); + } else { + res._publishCursor(self).then(() => { + self.ready(); + }).catch((e) => self.error(e)); } - // _publishCursor only returns after the initial added callbacks have run. - // mark subscription as ready. - self.ready(); } else if (_.isArray(res)) { // Check all the elements are cursors if (! _.all(res, isCursor)) { @@ -1207,15 +1216,21 @@ Object.assign(Subscription.prototype, { collectionNames[collectionName] = true; }; - try { - _.each(res, function (cur) { - cur._publishCursor(self); - }); - } catch (e) { - self.error(e); - return; + if (Meteor._isFibersEnabled) { + try { + _.each(res, function (cur) { + cur._publishCursor(self); + }); + } catch (e) { + self.error(e); + return; + } + self.ready(); + } else { + Promise.all(res.map((c) => c._publishCursor(self))).then(() => { + self.ready(); + }).catch((e) => self.error(e)); } - self.ready(); } else if (res) { // Truthy values other than cursors or arrays are probably a // user mistake (possible returning a Mongo document via, say, @@ -1492,9 +1507,11 @@ Server = function (options = {}) { sendError("Already connected", msg); return; } - Fiber(function () { + + Meteor._runAsync(function() { self._handleConnect(socket, msg); - }).run(); + }) + return; } @@ -1511,9 +1528,9 @@ Server = function (options = {}) { socket.on('close', function () { if (socket._meteorSession) { - Fiber(function () { + Meteor._runAsync(function() { socket._meteorSession.close(); - }).run(); + }); } }); }); @@ -1691,9 +1708,9 @@ Object.assign(Server.prototype, { // self.sessions to change while we're running this loop. self.sessions.forEach(function (session) { if (!session._dontStartNewUniversalSubs) { - Fiber(function() { + Meteor._runAsync(function() { session._startSubscription(handler); - }).run(); + }); } }); } diff --git a/packages/ddp-server/livedata_server_async_tests.js b/packages/ddp-server/livedata_server_async_tests.js index d145aeee92..d66a28f091 100644 --- a/packages/ddp-server/livedata_server_async_tests.js +++ b/packages/ddp-server/livedata_server_async_tests.js @@ -23,6 +23,8 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); +// console.log('methodInvocation', methodInvocation); +// console.log('publicationInvocation', !!publicationInvocation); // Check the publish function's environment variables and context. if (callback) { callback.call(this, methodInvocation, publicationInvocation); @@ -33,6 +35,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.onStop(function() { var onStopMethodInvocation = DDP._CurrentMethodInvocation.get(); var onStopPublicationInvocation = DDP._CurrentPublicationInvocation.get(); + callback.call( this, onStopMethodInvocation, @@ -45,7 +48,7 @@ Meteor.publish('livedata_server_test_sub_context_async', async function( this.stop(); } else { this.ready(); - Meteor.call('livedata_server_test_setuserid', userId); + await Meteor.callAsync('livedata_server_test_setuserid', userId); } }); diff --git a/packages/ddp-server/livedata_server_tests.js b/packages/ddp-server/livedata_server_tests.js index cde56b6196..101b1c2a93 100644 --- a/packages/ddp-server/livedata_server_tests.js +++ b/packages/ddp-server/livedata_server_tests.js @@ -87,8 +87,8 @@ Meteor.methods({ return this.connection && this.connection.id; }, - livedata_server_test_outer: function () { - return Meteor.call('livedata_server_test_inner'); + livedata_server_test_outer: async function () { + return await Meteor.callAsync('livedata_server_test_inner'); }, livedata_server_test_setuserid: function (userId) { @@ -108,12 +108,17 @@ Tinytest.addAsync( }); makeTestConnection( - test, - function (clientConn, serverConn) { - clientConn.call('livedata_server_test_inner'); - clientConn.disconnect(); - }, - onComplete + test, + function(clientConn, serverConn) { + clientConn + .callAsync('livedata_server_test_inner') + .then(() => clientConn.disconnect()) + .catch(e => { + onComplete(); + throw new Meteor.Error(e); + }); + }, + onComplete ); } ); @@ -125,10 +130,11 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - var res = clientConn.call('livedata_server_test_inner'); - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); + clientConn.callAsync('livedata_server_test_inner').then(res => { + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); + }); }, onComplete ); @@ -142,10 +148,11 @@ Tinytest.addAsync( makeTestConnection( test, function (clientConn, serverConn) { - var res = clientConn.call('livedata_server_test_outer'); - test.equal(res, serverConn.id); - clientConn.disconnect(); - onComplete(); + clientConn.callAsync('livedata_server_test_outer').then(res => { + test.equal(res, serverConn.id); + clientConn.disconnect(); + onComplete(); + }); }, onComplete ); @@ -163,16 +170,16 @@ Meteor.publish("livedata_server_test_sub", function (connectionId) { this.stop(); }); -Meteor.publish("livedata_server_test_sub_method", function (connectionId) { +Meteor.publish("livedata_server_test_sub_method", async function (connectionId) { var callback = onSubscription[connectionId]; if (callback) { - var id = Meteor.call('livedata_server_test_inner'); + var id = await Meteor.callAsync('livedata_server_test_inner'); callback(id); } this.stop(); }); -Meteor.publish("livedata_server_test_sub_context", function (connectionId, userId) { +Meteor.publish("livedata_server_test_sub_context", async function (connectionId, userId) { var callback = onSubscription[connectionId]; var methodInvocation = DDP._CurrentMethodInvocation.get(); var publicationInvocation = DDP._CurrentPublicationInvocation.get(); @@ -194,7 +201,7 @@ Meteor.publish("livedata_server_test_sub_context", function (connectionId, userI this.stop(); } else { this.ready(); - Meteor.call('livedata_server_test_setuserid', userId); + await Meteor.callAsync('livedata_server_test_setuserid', userId); } }); @@ -311,13 +318,13 @@ Tinytest.addAsync( ); Meteor.methods({ - testResolvedPromise(arg) { - const invocation1 = DDP._CurrentMethodInvocation.get(); + async testResolvedPromise(arg) { + const invocationRunningFromCallAsync1 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); return Promise.resolve(arg).then(result => { - const invocation2 = DDP._CurrentMethodInvocation.get(); - // This equality holds because Promise callbacks are bound to the - // dynamic environment where .then was called. - if (invocation1 !== invocation2) { + const invocationRunningFromCallAsync2 = DDP._CurrentMethodInvocation._isCallAsyncMethodRunning(); + // What matters here is that both invocations are coming from the same call, + // so both of them can be considered a simulation. + if (invocationRunningFromCallAsync1 !== invocationRunningFromCallAsync2) { throw new Meteor.Error("invocation mismatch"); } return result + " after waiting"; @@ -344,9 +351,10 @@ Meteor.methods({ Tinytest.addAsync( "livedata server - waiting for Promise", - (test, onComplete) => makeTestConnection(test, (clientConn, serverConn) => { + (test, onComplete) => makeTestConnection(test, async (clientConn, serverConn) => { + const testResolvedPromiseResult = await clientConn.callAsync("testResolvedPromise", "clientConn.call"); test.equal( - clientConn.call("testResolvedPromise", "clientConn.call"), + testResolvedPromiseResult, "clientConn.call after waiting" ); diff --git a/packages/ddp-server/package.js b/packages/ddp-server/package.js index 4077518df0..da413690b0 100644 --- a/packages/ddp-server/package.js +++ b/packages/ddp-server/package.js @@ -10,11 +10,6 @@ Npm.depends({ }); Package.onUse(function (api) { - if (process.env.DISABLE_FIBERS) { - api.use('ddp-server-async', 'server'); - api.export('DDPServer', 'server'); - return; - } api.use(['check', 'random', 'ejson', 'underscore', 'retry', 'mongo-id', 'diff-sequence', 'ecmascript'], 'server'); diff --git a/packages/ddp-server/writefence.js b/packages/ddp-server/writefence.js index e9310c9f7f..d85f028ff8 100644 --- a/packages/ddp-server/writefence.js +++ b/packages/ddp-server/writefence.js @@ -1,18 +1,121 @@ -var Future = Npm.require('fibers/future'); - // A write fence collects a group of writes, and provides a callback // when all of the writes are fully committed and propagated (all // observers have been notified of the write and acknowledged it.) // -DDPServer._WriteFence = function () { - var self = this; +DDPServer._WriteFence = class { + constructor() { + this.armed = false; + this.fired = false; + this.retired = false; + this.outstanding_writes = 0; + this.before_fire_callbacks = []; + this.completion_callbacks = []; + } - self.armed = false; - self.fired = false; - self.retired = false; - self.outstanding_writes = 0; - self.before_fire_callbacks = []; - self.completion_callbacks = []; + // Start tracking a write, and return an object to represent it. The + // object has a single method, committed(). This method should be + // called when the write is fully committed and propagated. You can + // continue to add writes to the WriteFence up until it is triggered + // (calls its callbacks because all writes have committed.) + beginWrite() { + if (this.retired) + return { committed: function () {} }; + + if (this.fired) + throw new Error("fence has already activated -- too late to add writes"); + + this.outstanding_writes++; + let committed = false; + const _committedFn = async () => { + if (committed) + throw new Error("committed called twice on the same write"); + committed = true; + this.outstanding_writes--; + await this._maybeFire(); + }; + + const self = this; + return { + committed: Meteor._isFibersEnabled ? () => Promise.await(_committedFn.apply(self)) : _committedFn, + }; + } + + // Arm the fence. Once the fence is armed, and there are no more + // uncommitted writes, it will activate. + arm() { + if (this === DDPServer._CurrentWriteFence.get()) + throw Error("Can't arm the current fence"); + this.armed = true; + return Meteor._isFibersEnabled ? Promise.await(this._maybeFire()) : this._maybeFire(); + } + + // Register a function to be called once before firing the fence. + // Callback function can add new writes to the fence, in which case + // it won't fire until those writes are done as well. + onBeforeFire(func) { + if (this.fired) + throw new Error("fence has already activated -- too late to " + + "add a callback"); + this.before_fire_callbacks.push(func); + } + + // Register a function to be called when the fence fires. + onAllCommitted(func) { + if (this.fired) + throw new Error("fence has already activated -- too late to " + + "add a callback"); + this.completion_callbacks.push(func); + } + + _armAndWait() { + let resolver; + const returnValue = new Promise(r => resolver = r); + this.onAllCommitted(resolver); + this.arm(); + + return returnValue; + } + // Convenience function. Arms the fence, then blocks until it fires. + armAndWait() { + return Meteor._isFibersEnabled ? Promise.await(this._armAndWait()) : this._armAndWait(); + } + + async _maybeFire() { + if (this.fired) + throw new Error("write fence already activated?"); + if (this.armed && !this.outstanding_writes) { + const invokeCallback = async (func) => { + try { + await func(this); + } catch (err) { + Meteor._debug("exception in write fence callback:", err); + } + }; + + this.outstanding_writes++; + while (this.before_fire_callbacks.length > 0) { + const cb = this.before_fire_callbacks.shift(); + await invokeCallback(cb); + } + this.outstanding_writes--; + + if (!this.outstanding_writes) { + this.fired = true; + while (this.completion_callbacks.length > 0) { + const cb = this.completion_callbacks.shift(); + await invokeCallback(cb); + } + } + } + } + + // Deactivate this fence so that adding more writes has no effect. + // The fence must have already fired. + retire() { + if (!this.fired) + throw new Error("Can't retire a fence that hasn't fired."); + this.retired = true; + } }; // The current write fence. When there is a current write fence, code @@ -20,112 +123,3 @@ DDPServer._WriteFence = function () { // beginWrite(). // DDPServer._CurrentWriteFence = new Meteor.EnvironmentVariable; - -_.extend(DDPServer._WriteFence.prototype, { - // Start tracking a write, and return an object to represent it. The - // object has a single method, committed(). This method should be - // called when the write is fully committed and propagated. You can - // continue to add writes to the WriteFence up until it is triggered - // (calls its callbacks because all writes have committed.) - beginWrite: function () { - var self = this; - - if (self.retired) - return { committed: function () {} }; - - if (self.fired) - throw new Error("fence has already activated -- too late to add writes"); - - self.outstanding_writes++; - var committed = false; - return { - committed: function () { - if (committed) - throw new Error("committed called twice on the same write"); - committed = true; - self.outstanding_writes--; - self._maybeFire(); - } - }; - }, - - // Arm the fence. Once the fence is armed, and there are no more - // uncommitted writes, it will activate. - arm: function () { - var self = this; - if (self === DDPServer._CurrentWriteFence.get()) - throw Error("Can't arm the current fence"); - self.armed = true; - self._maybeFire(); - }, - - // Register a function to be called once before firing the fence. - // Callback function can add new writes to the fence, in which case - // it won't fire until those writes are done as well. - onBeforeFire: function (func) { - var self = this; - if (self.fired) - throw new Error("fence has already activated -- too late to " + - "add a callback"); - self.before_fire_callbacks.push(func); - }, - - // Register a function to be called when the fence fires. - onAllCommitted: function (func) { - var self = this; - if (self.fired) - throw new Error("fence has already activated -- too late to " + - "add a callback"); - self.completion_callbacks.push(func); - }, - - // Convenience function. Arms the fence, then blocks until it fires. - armAndWait: function () { - var self = this; - var future = new Future; - self.onAllCommitted(function () { - future['return'](); - }); - self.arm(); - future.wait(); - }, - - _maybeFire: function () { - var self = this; - if (self.fired) - throw new Error("write fence already activated?"); - if (self.armed && !self.outstanding_writes) { - function invokeCallback (func) { - try { - func(self); - } catch (err) { - Meteor._debug("exception in write fence callback", err); - } - } - - self.outstanding_writes++; - while (self.before_fire_callbacks.length > 0) { - var callbacks = self.before_fire_callbacks; - self.before_fire_callbacks = []; - _.each(callbacks, invokeCallback); - } - self.outstanding_writes--; - - if (!self.outstanding_writes) { - self.fired = true; - var callbacks = self.completion_callbacks; - self.completion_callbacks = []; - _.each(callbacks, invokeCallback); - } - } - }, - - // Deactivate this fence so that adding more writes has no effect. - // The fence must have already fired. - retire: function () { - var self = this; - if (! self.fired) - throw new Error("Can't retire a fence that hasn't fired."); - self.retired = true; - } -}); From 7c4107c1f0ab0b336f755f42865d9dba0778bfed Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 5 Dec 2022 10:15:05 -0400 Subject: [PATCH 208/292] Removing Fibers import --- packages/ddp-server/livedata_server_async_tests.js | 1 - packages/ddp-server/livedata_server_tests.js | 3 --- 2 files changed, 4 deletions(-) diff --git a/packages/ddp-server/livedata_server_async_tests.js b/packages/ddp-server/livedata_server_async_tests.js index d66a28f091..c2ca9fcdee 100644 --- a/packages/ddp-server/livedata_server_async_tests.js +++ b/packages/ddp-server/livedata_server_async_tests.js @@ -1,4 +1,3 @@ -var Fiber = Npm.require('fibers'); function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); diff --git a/packages/ddp-server/livedata_server_tests.js b/packages/ddp-server/livedata_server_tests.js index 101b1c2a93..aa4cc6f845 100644 --- a/packages/ddp-server/livedata_server_tests.js +++ b/packages/ddp-server/livedata_server_tests.js @@ -1,6 +1,3 @@ -var Fiber = Npm.require('fibers'); - - Tinytest.addAsync( "livedata server - connectionHandle.onClose()", function (test, onComplete) { From fd0a83fb09a8d9f9863f39d12bd2db512fa06770 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 13:13:30 -0300 Subject: [PATCH 209/292] docs: updated info about vue 3 docs --- docs/history.md | 3 ++ docs/source/commandline.md | 76 ++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/docs/history.md b/docs/history.md index 200fbb8bca..f92ca1591a 100644 --- a/docs/history.md +++ b/docs/history.md @@ -15,6 +15,9 @@ * Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) * [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) * updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) + + #### Breaking Changes * Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 43622ccf07..cbc61b8e86 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -133,6 +133,12 @@ Create a basic [Vue 3](https://vuejs.org/) app. `--react` +Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) +for more information. This is the default. + +`--angular` +for more information. + `--vue-2` Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) @@ -157,39 +163,39 @@ Create a basic [Solid](https://www.solidjs.com/) app. **Packages** | | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:|:---------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | -| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | +| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | +| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | +| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | +| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | +| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | +| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | +| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | +| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | +| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | +| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | +| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | +| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | +| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | +| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | +| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | +| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X |

meteor generate

@@ -932,8 +938,8 @@ The `meteor node` command calls the [`node`](https://nodejs.org) version bundled with Meteor itself. > This is not to be confused with [`meteor shell`](#meteorshell), which provides -an almost identical experience but also gives you access to the "server" context -of a Meteor application. Typically, `meteor shell` will be preferred. +> an almost identical experience but also gives you access to the "server" context +> of a Meteor application. Typically, `meteor shell` will be preferred. Additional parameters can be passed in the same way as the `node` command, and the [Node.js documentation](https://nodejs.org/dist/latest-v4.x/docs/api/cli.html) From 6423bdae02806c70d6f6509e72d4c99a9ee4697b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 16:03:25 -0300 Subject: [PATCH 210/292] docs: updated Special thanks to --- docs/history.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/history.md b/docs/history.md index f92ca1591a..5bc2fec0f5 100644 --- a/docs/history.md +++ b/docs/history.md @@ -91,6 +91,18 @@ * `weibo-oauth@1.3.2` - Asyncfied methods. +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@edimarlnx](https://github.com/edimarlnx) +- [@matheusccastroo](https://github.com/matheusccastroo) +- [@Grubba27](https://github.com/Grubba27) +- [@StorytellerCZ](https://github.com/StorytellerCZ) +- [@radekmie](https://github.com/radekmie) +- [@piotrpospiech](https://github.com/piotrpospiech) +- [@harryadel](https://github.com/harryadel) + +For making this great framework even better! + ## v2.8.2, 2022-11-29 From 855c02447baf0e18f49e8c0c8cc6d3a9bea3bfbe Mon Sep 17 00:00:00 2001 From: arggh <17210302+arggh@users.noreply.github.com> Date: Mon, 5 Dec 2022 23:26:20 +0200 Subject: [PATCH 211/292] Streamline array operation handling --- packages/mongo/oplog_v2_converter.js | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 35f289a0f8..43c6e64411 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|u\d+)$/; +const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -46,12 +46,6 @@ function isArrayOperator(operator) { return operator.a === true && Object.keys(operator).every(isArrayOperatorKey); } -const arrayUpdateRegex = /^(u\d+)$/; - -function isArrayUpdate(operator) { - return arrayUpdateRegex.test(operator); -} - function flattenObjectInto(target, source, prefix) { if (Array.isArray(source) || typeof source !== 'object' || source === null) { target[prefix] = source; @@ -91,15 +85,6 @@ function convertOplogDiff(oplogEntry, diff, prefix) { Object.entries(value).forEach(([key, value]) => { oplogEntry.$set[join(prefix, key)] = value; }); - } else if (isArrayUpdate(diffKey)) { - const positionKey = join(prefix, diffKey.slice(1)); - if (value === null) { - oplogEntry.$unset ??= {}; - oplogEntry.$unset[positionKey] = true; - } else { - oplogEntry.$set ??= {}; - oplogEntry.$set[positionKey] = value; - } } else { // Handle s-fields. const key = diffKey.slice(1); @@ -111,7 +96,9 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (value === null) { + if (position[0] === 's') { + convertOplogDiff(oplogEntry, value, positionKey); + } else if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { From 67abe134598f5ffe0ef225482feb0aa6a2c76578 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 5 Dec 2022 18:54:36 -0300 Subject: [PATCH 212/292] Meteor version to 2.9.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 7213f5f9bc..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.9', + version: '2.2.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b4ff252406..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.9", + version: "1.4.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c706bf0c25..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.9', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index cd6e31c746..00bd03b3be 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.9' + version: '7.10.1' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 35b97f5ade..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.9', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 85e29c433a..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.9' + version: '1.11.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index e2df30d6f8..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.9' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 4719cc5fe7..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.9", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f7f81f07f7..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.9' + version: '1.1.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d59db10e79..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.9' + version: '1.3.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 8604dbc9ae..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.9', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8df4c3400d..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.9' + version: '1.10.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 6fd362836d..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.9' + version: '1.6.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 567889b2e2..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.9' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 457dc1ad34..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.9' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 05e860f139..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.9', + version: '4.12.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 5c82c54e57..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.9" + version: "2.1.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 9f3a4f4543..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.9", + version: "1.5.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 1d9ad78afb..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.9", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 26f0938117..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.9" + version: "3.2.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 434358825b..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.9", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 82b8848839..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.9', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 421eeadf32..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.9' + version: '1.3.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 722d3c7250..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.9', + version: '1.3.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 8f731c5e2c..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.9' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 05bd32186a..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.9' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21052010f4..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.9', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9f4b7f643b..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.9", + version: "1.3.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 596b7d924c..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.9", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" From a17d68ecac054c59025236f96c0a7b9b0f99b0c9 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 10:36:29 -0300 Subject: [PATCH 213/292] tests: trying to solve missing wrong tests --- npm-packages/meteor-babel/package-lock.json | 77 +++++++++++++++++++++ npm-packages/meteor-babel/package.json | 2 + 2 files changed, 79 insertions(+) diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index b3d0d406f2..9d70f46c4e 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -26,6 +26,8 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { @@ -3060,6 +3062,17 @@ "node": ">=4" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -3361,6 +3374,29 @@ "asap": "~2.0.6" } }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -3478,6 +3514,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -6144,6 +6188,14 @@ "chalk": "^2.0.1" } }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -6389,6 +6441,23 @@ "asap": "~2.0.6" } }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -6487,6 +6556,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 0dd8a7b838..397b271404 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -47,6 +47,8 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { From 9d8fb1e0238d7833a6edb55f98677b8154f81e9c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 10:46:45 -0300 Subject: [PATCH 214/292] tests: added flag and tested --- npm-packages/meteor-babel/options.js | 13 ++++++++----- npm-packages/meteor-babel/package.json | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 41bc4a2363..60611ea3a9 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,11 +80,14 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push( - [require("@babel/preset-react"), { - runtime: "automatic" - }] - ); + // get flag passed in args BABEL_TESTING + const reactBabel = + process.env.BABEL_TESTING + ? require("@babel/preset-react") + : [require("@babel/preset-react"), { + runtime: "automatic" + }]; + options.presets.push(reactBabel); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 397b271404..39420149f6 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -18,7 +18,7 @@ ], "main": "index.js", "scripts": { - "test": "test/run.sh", + "test": "BABEL_TESTING=1 test/run.sh", "update-versions": "bash scripts/update-versions" }, "homepage": "https://github.com/meteor/babel", From b4e0732b19779ce898ee4c5ee5d0c494f0563e69 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 11:05:59 -0300 Subject: [PATCH 215/292] test: upgraded modules deps --- tools/tests/apps/modules/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 86b12e64ff..8c0b126ecf 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,7 +26,8 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react-dom": "^16.8.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", "stripe": "^4.4.0", From f28f7a4aca759676e4d0c5ef785b49bdee239387 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 11:28:58 -0300 Subject: [PATCH 216/292] tests: changed deps --- tools/tests/apps/modules/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 8c0b126ecf..817740ad15 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,8 +26,8 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^16.8.6", + "react-dom": "^16.8.6", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", "stripe": "^4.4.0", From 3fe390df89c4a5b69892306377144811d329f2fd Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 13:58:37 -0300 Subject: [PATCH 217/292] chore: revert to withou runtime automatic --- npm-packages/meteor-babel/options.js | 9 +-- npm-packages/meteor-babel/package-lock.json | 81 +-------------------- npm-packages/meteor-babel/package.json | 6 +- 3 files changed, 5 insertions(+), 91 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 60611ea3a9..dc215572b8 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,14 +80,7 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - // get flag passed in args BABEL_TESTING - const reactBabel = - process.env.BABEL_TESTING - ? require("@babel/preset-react") - : [require("@babel/preset-react"), { - runtime: "automatic" - }]; - options.presets.push(reactBabel); + options.presets.push(require("@babel/preset-react")); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 9d70f46c4e..17c5612fb7 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,12 +1,12 @@ { "name": "@meteorjs/babel", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@meteorjs/babel", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "dependencies": { "@babel/core": "^7.17.2", @@ -26,8 +26,6 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { @@ -3062,17 +3060,6 @@ "node": ">=4" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -3374,29 +3361,6 @@ "asap": "~2.0.6" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -3514,14 +3478,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -6188,14 +6144,6 @@ "chalk": "^2.0.1" } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -6441,23 +6389,6 @@ "asap": "~2.0.6" } }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -6556,14 +6487,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 39420149f6..6733ac41b8 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -18,7 +18,7 @@ ], "main": "index.js", "scripts": { - "test": "BABEL_TESTING=1 test/run.sh", + "test": "test/run.sh", "update-versions": "bash scripts/update-versions" }, "homepage": "https://github.com/meteor/babel", @@ -47,8 +47,6 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", "typescript": "~4.6.4" }, "devDependencies": { From 35123ff3a0fd912ab799bdcaf2fcafd3ab4956a6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:03:44 -0300 Subject: [PATCH 218/292] Revert "Meteor version to 2.9.0 :comet:" This reverts commit 67abe134598f5ffe0ef225482feb0aa6a2c76578. --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 61a19fd4ba..7213f5f9bc 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6', + version: '2.2.6-rc290.9', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index d26a1ff571..b4ff252406 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2", + version: "1.4.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 719191d8dc..c706bf0c25 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2', + version: '2.3.2-rc290.9', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 00bd03b3be..cd6e31c746 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1' + version: '7.10.1-rc290.9' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index a43b8dec7e..adb2b73436 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index cc02138f6d..35b97f5ade 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3', + version: '2.2.3-rc290.9', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 98b393d2a9..85e29c433a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2' + version: '1.11.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2316e275a2..e2df30d6f8 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1' + version: '1.4.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 141c79e6c6..4719cc5fe7 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3", + version: "1.4.3-rc290.9", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index e5049f19cf..f7f81f07f7 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2' + version: '1.1.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 36e4dbb76c..d59db10e79 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2' + version: '1.3.2-rc290.9' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bafb59a62e..8604dbc9ae 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0', + version: '2.9.0-rc.9', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7007d77957..8df4c3400d 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3' + version: '1.10.3-rc290.9' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 373e5ae579..6fd362836d 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2' + version: '1.6.2-rc290.9' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 2353ea1305..567889b2e2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1' + version: '1.9.1-rc290.9' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index e744c56705..457dc1ad34 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3' + version: '1.16.3-rc290.9' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..05e860f139 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.12.1-rc290.9', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4b56f43d33..5c82c54e57 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3" + version: "2.1.3-rc290.9" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 7435caf024..9f3a4f4543 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1", + version: "1.5.1-rc290.9", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4ba099aa41..1d9ad78afb 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 78a084498d..26f0938117 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1" + version: "3.2.1-rc290.9" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index fcf72881c5..434358825b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2", + version: "0.12.2-rc290.9", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 7d6b2746e9..82b8848839 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3', + version: '1.8.3-rc290.9', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..421eeadf32 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.1-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 57e3474024..722d3c7250 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2', + version: '1.3.2-rc290.9', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 21a7a053f3..8f731c5e2c 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2' + version: '1.2.2-rc290.9' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 62d7646ca8..05bd32186a 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2' + version: '1.3.2-rc290.9' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..21052010f4 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.6.4-rc290.9', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e2de8dd3ba..9f4b7f643b 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2", + version: "1.3.2-rc290.9", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index acce35a806..596b7d924c 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.9.0-rc.9", "recommended": false, "official": false, "description": "Meteor experimental release" From de7c362f51e3ff1d94091124da08c62bfec6ef45 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:08:57 -0300 Subject: [PATCH 219/292] Meteor version to 2.9.0-rc.10 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 4 ++-- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 7213f5f9bc..2fdbd097ff 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.9', + version: '2.2.6-rc290.10', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index b4ff252406..a4f9d1f760 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.9", + version: "1.4.2-rc290.10", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c706bf0c25..1a9b0cc44e 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.9', + version: '2.3.2-rc290.10', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index cd6e31c746..79f88dafdc 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.9' + version: '7.10.1-rc290.10' }); Npm.depends({ - '@meteorjs/babel': '7.17.1-beta.0', + '@meteorjs/babel': '7.17.2-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..99bc638e1c 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4-rc290.10', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 35b97f5ade..156b5b5891 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.9', + version: '2.2.3-rc290.10', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 85e29c433a..f6173e8bbd 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.9' + version: '1.11.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index e2df30d6f8..3abbd6f03b 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.9' + version: '1.4.1-rc290.10' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 4719cc5fe7..c0662ce794 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.9", + version: "1.4.3-rc290.10", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index f7f81f07f7..9d0ac88e3f 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.9' + version: '1.1.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index d59db10e79..a0c3f040f1 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.9' + version: '1.3.2-rc290.10' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 8604dbc9ae..2a7ebccfdb 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.9', + version: '2.9.0-rc.10', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 8df4c3400d..fa1569d14b 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.9' + version: '1.10.3-rc290.10' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 6fd362836d..18cfc3115e 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.9' + version: '1.6.2-rc290.10' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 567889b2e2..bc8a8550a8 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.9' + version: '1.9.1-rc290.10' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 457dc1ad34..79795008ba 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.9' + version: '1.16.3-rc290.10' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 05e860f139..634e484142 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.9', + version: '4.12.1-rc290.10', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 5c82c54e57..f6c726d0fb 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.9" + version: "2.1.3-rc290.10" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 9f3a4f4543..30aea80fa8 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.9", + version: "1.5.1-rc290.10", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 1d9ad78afb..2ca4f53d53 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.9", + version: "1.3.2-rc290.10", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 26f0938117..da8a145ccf 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.9" + version: "3.2.1-rc290.10" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 434358825b..61fb69da02 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.9", + version: "0.12.2-rc290.10", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 82b8848839..d5436e0e06 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.9', + version: '1.8.3-rc290.10', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 421eeadf32..3fe5bec067 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.9' + version: '1.3.1-rc290.10' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 722d3c7250..7ff78fe3de 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.9', + version: '1.3.2-rc290.10', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 8f731c5e2c..057da42bf8 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.9' + version: '1.2.2-rc290.10' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 05bd32186a..85d14f7f81 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.9' + version: '1.3.2-rc290.10' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21052010f4..9821047c54 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.9', + version: '4.6.4-rc290.10', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9f4b7f643b..e00d7e3006 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.9", + version: "1.3.2-rc290.10", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 596b7d924c..1aed99450b 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.9", + "version": "2.9.0-rc.10", "recommended": false, "official": false, "description": "Meteor experimental release" From b78112b2d0461cb9c78d1849560bc837356ae125 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 14:10:49 -0300 Subject: [PATCH 220/292] tests: Revert Adition of react in package.json --- tools/tests/apps/modules/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 817740ad15..86b12e64ff 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -26,7 +26,6 @@ "mysql": "^2.15.0", "pify": "^4.0.1", "puppeteer": "^2.1.1", - "react": "^16.8.6", "react-dom": "^16.8.6", "react-trello": "2.1.4", "regenerator-runtime": "^0.11.1", From 3098bf72fb301ff3596c12b2c29d4bbcec134089 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 15:02:22 -0300 Subject: [PATCH 221/292] tests: adjusting missing tests --- .../babel-compiler/.npm/package/npm-shrinkwrap.json | 12 ++++++------ tools/tests/shell-tests.js | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 6b29dfbba0..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -648,9 +648,9 @@ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001435", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz", - "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==" + "version": "1.0.30001436", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", + "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" }, "chalk": { "version": "2.4.2", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 037106c245..1db92c6eaa 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -14,8 +14,8 @@ selftest.define("meteor shell", function () { // First try a simple one-line expression. shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); - shell.waitSecs(10); - shell.match('{"server":true}'); + shell.waitSecs(20); + shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From c42eff7141e9f51f707a9eb195beccc872e0523e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 15:57:32 -0300 Subject: [PATCH 222/292] tests: changed a little bit --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- tools/tests/shell-tests.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..248dfa3f33 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 1db92c6eaa..7b4c1a05e1 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("({server:Meteor.isServer})\n"); + shell.write("{server:Meteor.isServer}\n"); + shell.match('{server:true}'); shell.proc.stdin.end(); shell.waitSecs(20); - shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 11b0d0a8f8f20ad75147cb8a9ebed702175b7b9c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:23:22 -0300 Subject: [PATCH 223/292] Revert "tests: changed a little bit" This reverts commit c42eff7141e9f51f707a9eb195beccc872e0523e. --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- tools/tests/shell-tests.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 248dfa3f33..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 7b4c1a05e1..1db92c6eaa 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("{server:Meteor.isServer}\n"); - shell.match('{server:true}'); + shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); shell.waitSecs(20); + shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 810e55be4be0200799b07eef83cd6f63fb260bff Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:23:48 -0300 Subject: [PATCH 224/292] tests: twerked a little bit more --- tools/tests/shell-tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 1db92c6eaa..7b4c1a05e1 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("({server:Meteor.isServer})\n"); + shell.write("{server:Meteor.isServer}\n"); + shell.match('{server:true}'); shell.proc.stdin.end(); shell.waitSecs(20); - shell.match('{server:true}'); shell.expectExit(0); shell = s.run("shell"); From 3a9bed8b1fb55009749de252218a2b07c382ab4c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 16:32:49 -0300 Subject: [PATCH 225/292] chore: upgrade deps --- meteor | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meteor b/meteor index 9e615ab4c0..e1379039a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.1 +BUNDLE_VERSION=14.21.1.2 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 301661ce9c..c265734f8a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.1-beta.0", + "@meteorjs/babel": "7.17.2-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From e7092b70af4d3c69144dfe8ebd6b4584d7cd0a46 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:00:59 -0300 Subject: [PATCH 226/292] Meteor version to 2.9.0-rc.11 --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 2fdbd097ff..5e3e313715 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.10', + version: '2.2.6-rc290.11', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index a4f9d1f760..05e6f22fe7 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.10", + version: "1.4.2-rc290.11", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 1a9b0cc44e..96e8d9af97 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.10', + version: '2.3.2-rc290.11', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 79f88dafdc..53664bf356 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.10' + version: '7.10.1-rc290.11' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index 99bc638e1c..d2ffb02434 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4-rc290.10', + version: '0.16.4-rc290.11', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 156b5b5891..947a49d19d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.10', + version: '2.2.3-rc290.11', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index f6173e8bbd..82bfe9999f 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.10' + version: '1.11.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 3abbd6f03b..f0463ace26 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.10' + version: '1.4.1-rc290.11' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index c0662ce794..c2503db373 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.10", + version: "1.4.3-rc290.11", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9d0ac88e3f..9476455dea 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.10' + version: '1.1.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index a0c3f040f1..216cbe14bb 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.10' + version: '1.3.2-rc290.11' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 2a7ebccfdb..788aa39f16 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.10', + version: '2.9.0-rc.11', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index fa1569d14b..11fa4d2e1f 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.10' + version: '1.10.3-rc290.11' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 18cfc3115e..0e1c67b833 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.10' + version: '1.6.2-rc290.11' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index bc8a8550a8..9f03acbcaa 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.10' + version: '1.9.1-rc290.11' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 79795008ba..cc0a0789e2 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.10' + version: '1.16.3-rc290.11' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 634e484142..6c8b37b275 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.10', + version: '4.12.1-rc290.11', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f6c726d0fb..8f07f1c302 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.10" + version: "2.1.3-rc290.11" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 30aea80fa8..0b6a54db9a 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.10", + version: "1.5.1-rc290.11", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 2ca4f53d53..e37609c30c 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.10", + version: "1.3.2-rc290.11", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index da8a145ccf..507a91f383 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.10" + version: "3.2.1-rc290.11" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 61fb69da02..bba347be62 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.10", + version: "0.12.2-rc290.11", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index d5436e0e06..319f504d5f 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.10', + version: '1.8.3-rc290.11', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 3fe5bec067..c0a4593856 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.10' + version: '1.3.1-rc290.11' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 7ff78fe3de..d6e032eda0 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.10', + version: '1.3.2-rc290.11', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 057da42bf8..4df49926f6 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.10' + version: '1.2.2-rc290.11' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 85d14f7f81..e239da705d 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.10' + version: '1.3.2-rc290.11' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 9821047c54..fc46024760 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.10', + version: '4.6.4-rc290.11', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e00d7e3006..9beb6e14a2 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.10", + version: "1.3.2-rc290.11", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 1aed99450b..0a951d5127 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.10", + "version": "2.9.0-rc.11", "recommended": false, "official": false, "description": "Meteor experimental release" From cf818aa33a2a3e05328477954631c73795923f6e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:18:56 -0300 Subject: [PATCH 227/292] tests: tried solving test again --- tools/tests/shell-tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index 7b4c1a05e1..e86b5c850e 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -13,7 +13,7 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. shell.write("{server:Meteor.isServer}\n"); - shell.match('{server:true}'); + shell.match('{ server: true }'); shell.proc.stdin.end(); shell.waitSecs(20); shell.expectExit(0); From 1b87c1f892b93e8e2aac3e2e070f3df24044ae79 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:34:21 -0300 Subject: [PATCH 228/292] chore: updated version --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..248dfa3f33 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.17.1-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", + "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" }, "@meteorjs/reify": { "version": "0.23.0", From 037d68615c60eb794cbe7e5dd8ab8c6e96b79177 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 17:53:47 -0300 Subject: [PATCH 229/292] tests: tried again --- tools/tests/shell-tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index e86b5c850e..e227420589 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -13,9 +13,9 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. shell.write("{server:Meteor.isServer}\n"); - shell.match('{ server: true }'); shell.proc.stdin.end(); shell.waitSecs(20); + shell.match('{ server: true }'); shell.expectExit(0); shell = s.run("shell"); From a30809863322cd71cb89d8f37b0fd17ef236da3a Mon Sep 17 00:00:00 2001 From: denihs Date: Tue, 6 Dec 2022 18:16:35 -0400 Subject: [PATCH 230/292] fixing _scheduleRun: It was adding an infity amount of tasks. fixing tests --- .../ddp-client/common/livedata_connection.js | 31 -- .../test/livedata_connection_tests.js | 518 +++++++++--------- packages/ddp-client/test/stub_stream.js | 16 +- packages/meteor/async_helpers.js | 26 +- packages/meteor/dynamics_nodejs.js | 6 +- 5 files changed, 276 insertions(+), 321 deletions(-) diff --git a/packages/ddp-client/common/livedata_connection.js b/packages/ddp-client/common/livedata_connection.js index 1855a0e0f5..03b42c2a5a 100644 --- a/packages/ddp-client/common/livedata_connection.js +++ b/packages/ddp-client/common/livedata_connection.js @@ -15,13 +15,6 @@ import { last, } from "meteor/ddp-common/utils.js"; -let Fiber; -let Future; -if (Meteor.isServer) { - Fiber = Npm.require('fibers'); - Future = Npm.require('fibers/future'); -} - class MongoIDMap extends IdMap { constructor() { super(MongoID.idStringify, MongoID.idParse); @@ -494,30 +487,6 @@ export class Connection { return handle; } - // options: - // - onLateError {Function(error)} called if an error was received after the ready event. - // (errors received before ready cause an error to be thrown) - _subscribeAndWait(name, args, options) { - const self = this; - const f = new Future(); - let ready = false; - args = args || []; - args.push({ - onReady() { - ready = true; - f['return'](); - }, - onError(e) { - if (!ready) f['throw'](e); - else options && options.onLateError && options.onLateError(e); - } - }); - - const handle = self.subscribe.apply(self, [name].concat(args)); - f.wait(); - return handle; - } - methods(methods) { Object.entries(methods).forEach(([name, func]) => { if (typeof func !== 'function') { diff --git a/packages/ddp-client/test/livedata_connection_tests.js b/packages/ddp-client/test/livedata_connection_tests.js index 32e014ccbf..3b9d4ce904 100644 --- a/packages/ddp-client/test/livedata_connection_tests.js +++ b/packages/ddp-client/test/livedata_connection_tests.js @@ -63,27 +63,27 @@ const testGotMessage = function(test, stream, expected) { return got; }; -const startAndConnect = function(test, stream) { - stream.reset(); // initial connection start. +const startAndConnect = async function(test, stream) { + await stream.reset(); // initial connection start. testGotMessage(test, stream, makeConnectMessage()); test.length(stream.sent, 0); - stream.receive({ msg: 'connected', session: SESSION_ID }); + await stream.receive({ msg: 'connected', session: SESSION_ID }); test.length(stream.sent, 0); }; const SESSION_ID = '17'; -Tinytest.add('livedata stub - receive data', function(test) { +Tinytest.addAsync('livedata stub - receive data', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // data comes in for unknown collection. const coll_name = Random.id(); - stream.receive({ + await stream.receive({ msg: 'added', collection: coll_name, id: '1234', @@ -101,7 +101,7 @@ Tinytest.add('livedata stub - receive data', function(test) { test.equal(coll.find({}).fetch(), [{ _id: '1234', a: 1 }]); // second message. applied directly to the db. - stream.receive({ + await stream.receive({ msg: 'changed', collection: coll_name, id: '1234', @@ -111,7 +111,7 @@ Tinytest.add('livedata stub - receive data', function(test) { test.isUndefined(conn._updatesForUnknownStores[coll_name]); }); -Tinytest.add('livedata stub - buffering data', function(test) { +Tinytest.addAsync('livedata stub - buffering data', async function(test) { // Install special setTimeout that allows tick-by-tick control in tests using sinonjs 'lolex' // This needs to be before the connection is instantiated. const clock = FakeTimers.install(); @@ -123,15 +123,15 @@ Tinytest.add('livedata stub - buffering data', function(test) { bufferedWritesMaxAge: 40 }); - startAndConnect(test, stream); + await startAndConnect(test, stream); const coll_name = Random.id(); const coll = new Mongo.Collection(coll_name, conn); const testDocCount = count => test.equal(coll.find({}).count(), count); - const addDoc = () => { - stream.receive({ + const addDoc = async () => { + await stream.receive({ msg: 'added', collection: coll_name, id: Random.id(), @@ -141,31 +141,31 @@ Tinytest.add('livedata stub - buffering data', function(test) { // Starting at 0 ticks. At this point we haven't advanced the fake clock at all. - addDoc(); // 1st Doc + await addDoc(); // 1st Doc testDocCount(0); // No doc been recognized yet because it's buffered, waiting for more. tick(6); // 6 total ticks testDocCount(0); // Ensure that the doc still hasn't shown up, despite the clock moving forward. tick(4); // 10 total ticks, 1st buffer interval testDocCount(1); // No other docs have arrived, so we 'see' the 1st doc. - addDoc(); // 2nd doc + await addDoc(); // 2nd doc tick(1); // 11 total ticks (1 since last flush) testDocCount(1); // Again, second doc hasn't arrived because we're waiting for more... tick(9); // 20 total ticks (10 ticks since last flush & the 2nd 10-tick interval) testDocCount(2); // Now we're here and got the second document. // Add several docs, frequently enough that we buffer multiple times before the next flush. - addDoc(); // 3 docs + await addDoc(); // 3 docs tick(6); // 26 ticks (6 since last flush) - addDoc(); // 4 docs + await addDoc(); // 4 docs tick(6); // 32 ticks (12 since last flush) - addDoc(); // 5 docs + await addDoc(); // 5 docs tick(6); // 38 ticks (18 since last flush) - addDoc(); // 6 docs + await addDoc(); // 6 docs tick(6); // 44 ticks (24 since last flush) - addDoc(); // 7 docs + await addDoc(); // 7 docs tick(9); // 53 ticks (33 since last flush) - addDoc(); // 8 docs + await addDoc(); // 8 docs tick(9); // 62 ticks! (42 ticks since last flush, over max-age - next interval triggers flush) testDocCount(2); // Still at 2 from before! (Just making sure) tick(1); // Ok, 63 ticks (10 since last doc, so this should cause the flush of all the docs) @@ -175,11 +175,11 @@ Tinytest.add('livedata stub - buffering data', function(test) { clock.uninstall(); }); -Tinytest.add('livedata stub - subscribe', function(test) { +Tinytest.addAsync('livedata stub - subscribe', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // subscribe let callback_fired = false; @@ -201,7 +201,7 @@ Tinytest.add('livedata stub - subscribe', function(test) { test.isFalse(reactivelyReady); // get the sub satisfied. callback fires. - stream.receive({ msg: 'ready', subs: [id] }); + await stream.receive({ msg: 'ready', subs: [id] }); test.isTrue(callback_fired); Tracker.flush(); test.isTrue(reactivelyReady); @@ -224,11 +224,11 @@ Tinytest.add('livedata stub - subscribe', function(test) { test.equal(message, { msg: 'sub', name: 'my_data', params: [] }); }); -Tinytest.add('livedata stub - reactive subscribe', function(test) { +Tinytest.addAsync('livedata stub - reactive subscribe', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const rFoo = new ReactiveVar('foo1'); const rBar = new ReactiveVar('bar1'); @@ -283,7 +283,7 @@ Tinytest.add('livedata stub - reactive subscribe', function(test) { test.isFalse(completerReady); // "completer" gets ready now. its callback should fire. - stream.receive({ msg: 'ready', subs: [idCompleter] }); + await stream.receive({ msg: 'ready', subs: [idCompleter] }); test.equal(onReadyCount, { completer: 1 }); test.length(stream.sent, 0); Tracker.flush(); @@ -331,7 +331,7 @@ Tinytest.add('livedata stub - reactive subscribe', function(test) { // the client; completing bar should call the onReady from the new // subscription because we always call onReady for a given reactively-saved // subscription. - stream.receive({ msg: 'ready', subs: [idStopperAgain, idBar1] }); + await stream.receive({ msg: 'ready', subs: [idStopperAgain, idBar1] }); test.equal(onReadyCount, { completer: 2, bar1: 1, stopper: 1 }); // Shut down the autorun. This should unsub us from all current subs at flush @@ -353,13 +353,13 @@ Tinytest.add('livedata stub - reactive subscribe', function(test) { test.equal(actualIds, expectedIds); }); -Tinytest.add('livedata stub - reactive subscribe handle correct', function( +Tinytest.addAsync('livedata stub - reactive subscribe handle correct', async function( test ) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const rFoo = new ReactiveVar('foo1'); @@ -402,7 +402,7 @@ Tinytest.add('livedata stub - reactive subscribe handle correct', function( test.isFalse(fooReady); // "foo" gets ready now. The handle should be ready and the autorun rerun - stream.receive({ msg: 'ready', subs: [idFoo2] }); + await stream.receive({ msg: 'ready', subs: [idFoo2] }); test.length(stream.sent, 0); Tracker.flush(); test.isTrue(fooHandle.ready()); @@ -427,7 +427,7 @@ Tinytest.add('livedata stub - reactive subscribe handle correct', function( test.isFalse(fooReady); // "foo" gets ready again - stream.receive({ msg: 'ready', subs: [idFoo3] }); + await stream.receive({ msg: 'ready', subs: [idFoo3] }); test.length(stream.sent, 0); Tracker.flush(); test.isTrue(fooHandle.ready()); @@ -436,11 +436,11 @@ Tinytest.add('livedata stub - reactive subscribe handle correct', function( autorunHandle.stop(); }); -Tinytest.add('livedata stub - this', function(test) { +Tinytest.addAsync('livedata stub - this', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); conn.methods({ test_this: function() { test.isTrue(this.isSimulation); @@ -461,30 +461,30 @@ Tinytest.add('livedata stub - this', function(test) { }); test.length(stream.sent, 0); - stream.receive({ msg: 'result', id: message.id, result: null }); - stream.receive({ msg: 'updated', methods: [message.id] }); + await stream.receive({ msg: 'result', id: message.id, result: null }); + await stream.receive({ msg: 'updated', methods: [message.id] }); }); if (Meteor.isClient) { - Tinytest.add('livedata stub - methods', function(test) { + Tinytest.addAsync('livedata stub - methods', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); // setup method conn.methods({ - do_something: function(x) { - coll.insert({ value: x }); + do_something: async function(x) { + await coll.insertAsync({ value: x }); } }); // setup observers const counts = { added: 0, removed: 0, changed: 0, moved: 0 }; - const handle = coll.find({}).observe({ + const handle = await coll.find({}).observe({ addedAt: function() { counts.added += 1; }, @@ -520,29 +520,29 @@ if (Meteor.isClient) { randomSeed: '*' }); - test.equal(coll.find({}).count(), 1); - test.equal(coll.find({ value: 'friday!' }).count(), 1); - const docId = coll.findOne({ value: 'friday!' })._id; + test.equal(await coll.find({}).count(), 1); + test.equal(await coll.find({ value: 'friday!' }).count(), 1); + const docId = await coll.findOneAsync({ value: 'friday!' })._id; // results does not yet result in callback, because data is not // ready. - stream.receive({ msg: 'result', id: message.id, result: '1234' }); + await stream.receive({ msg: 'result', id: message.id, result: '1234' }); test.isFalse(callback1Fired); // result message doesn't affect data - test.equal(coll.find({}).count(), 1); - test.equal(coll.find({ value: 'friday!' }).count(), 1); + test.equal(await coll.find({}).count(), 1); + test.equal(await coll.find({ value: 'friday!' }).count(), 1); test.equal(counts, { added: 1, removed: 0, changed: 0, moved: 0 }); // data methods do not show up (not quiescent yet) - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(docId), fields: { value: 'tuesday' } }); - test.equal(coll.find({}).count(), 1); - test.equal(coll.find({ value: 'friday!' }).count(), 1); + test.equal(await coll.find({}).count(), 1); + test.equal(await coll.find({ value: 'friday!' }).count(), 1); test.equal(counts, { added: 1, removed: 0, changed: 0, moved: 0 }); // send another methods (unknown on client) @@ -566,35 +566,35 @@ if (Meteor.isClient) { // get the first data satisfied message. changes are applied to database even // though another method is outstanding, because the other method didn't have // a stub. and its callback is called. - stream.receive({ msg: 'updated', methods: [message.id] }); + await stream.receive({ msg: 'updated', methods: [message.id] }); test.isTrue(callback1Fired); test.isFalse(callback2Fired); - test.equal(coll.find({}).count(), 1); - test.equal(coll.find({ value: 'tuesday' }).count(), 1); + test.equal(await coll.find({}).count(), 1); + test.equal(await coll.find({ value: 'tuesday' }).count(), 1); test.equal(counts, { added: 1, removed: 0, changed: 1, moved: 0 }); // second result - stream.receive({ msg: 'result', id: message2.id, result: 'bupkis' }); + await stream.receive({ msg: 'result', id: message2.id, result: 'bupkis' }); test.isFalse(callback2Fired); // get second satisfied; no new changes are applied. - stream.receive({ msg: 'updated', methods: [message2.id] }); + await stream.receive({ msg: 'updated', methods: [message2.id] }); test.isTrue(callback2Fired); - test.equal(coll.find({}).count(), 1); - test.equal(coll.find({ value: 'tuesday', _id: docId }).count(), 1); + test.equal(await coll.find({}).count(), 1); + test.equal(await coll.find({ value: 'tuesday', _id: docId }).count(), 1); test.equal(counts, { added: 1, removed: 0, changed: 1, moved: 0 }); handle.stop(); }); } -Tinytest.add('livedata stub - mutating method args', function(test) { +Tinytest.addAsync('livedata stub - mutating method args', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); conn.methods({ mutateArgs: function(arg) { @@ -616,10 +616,10 @@ Tinytest.add('livedata stub - mutating method args', function(test) { test.length(stream.sent, 0); }); -const observeCursor = function(test, cursor) { +const observeCursor = async function(test, cursor) { const counts = { added: 0, removed: 0, changed: 0, moved: 0 }; const expectedCounts = _.clone(counts); - const handle = cursor.observe({ + const handle = await cursor.observe({ addedAt: function() { counts.added += 1; }, @@ -646,11 +646,11 @@ const observeCursor = function(test, cursor) { // method calls another method in simulation. see not sent. if (Meteor.isClient) { - Tinytest.add('livedata stub - methods calling methods', function(test) { + Tinytest.addAsync('livedata stub - methods calling methods', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const coll_name = Random.id(); const coll = new Mongo.Collection(coll_name, { connection: conn }); @@ -665,7 +665,7 @@ if (Meteor.isClient) { } }); - const o = observeCursor(test, coll.find()); + const o = await observeCursor(test, coll.find()); // call method. conn.call('do_something', _.identity); @@ -683,40 +683,40 @@ if (Meteor.isClient) { // but inner method runs locally. o.expectCallbacks({ added: 1 }); test.equal(coll.find().count(), 1); - const docId = coll.findOne()._id; - test.equal(coll.findOne(), { _id: docId, a: 1 }); + const docId = await coll.findOneAsync()._id; + test.equal(await coll.findOneAsync(), { _id: docId, a: 1 }); // we get the results - stream.receive({ msg: 'result', id: message.id, result: '1234' }); + await stream.receive({ msg: 'result', id: message.id, result: '1234' }); // get data from the method. data from this doc does not show up yet, but data // from another doc does. - stream.receive({ + await stream.receive({ msg: 'added', collection: coll_name, id: MongoID.idStringify(docId), fields: { value: 'tuesday' } }); o.expectCallbacks(); - test.equal(coll.findOne(docId), { _id: docId, a: 1 }); - stream.receive({ + test.equal(await coll.findOneAsync(docId), { _id: docId, a: 1 }); + await stream.receive({ msg: 'added', collection: coll_name, id: 'monkey', fields: { value: 'bla' } }); o.expectCallbacks({ added: 1 }); - test.equal(coll.findOne(docId), { _id: docId, a: 1 }); - const newDoc = coll.findOne({ value: 'bla' }); + test.equal(await coll.findOneAsync(docId), { _id: docId, a: 1 }); + const newDoc = await coll.findOneAsync({ value: 'bla' }); test.isTrue(newDoc); test.equal(newDoc, { _id: newDoc._id, value: 'bla' }); // get method satisfied. all data shows up. the 'a' field is reverted and // 'value' field is set. - stream.receive({ msg: 'updated', methods: [message.id] }); + await stream.receive({ msg: 'updated', methods: [message.id] }); o.expectCallbacks({ changed: 1 }); - test.equal(coll.findOne(docId), { _id: docId, value: 'tuesday' }); - test.equal(coll.findOne(newDoc._id), { _id: newDoc._id, value: 'bla' }); + test.equal(await coll.findOneAsync(docId), { _id: docId, value: 'tuesday' }); + test.equal(await coll.findOneAsync(newDoc._id), { _id: newDoc._id, value: 'bla' }); o.stop(); }); @@ -746,7 +746,7 @@ Tinytest.add('livedata stub - method call before connect', function(test) { }); }); -Tinytest.add('livedata stub - reconnect', function(test) { +Tinytest.addAsync('livedata stub - reconnect', async function(test, onComplete) { const stream = new StubStream(); const conn = newConnection(stream); @@ -755,7 +755,7 @@ Tinytest.add('livedata stub - reconnect', function(test) { const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); - const o = observeCursor(test, coll.find()); + const o = await observeCursor(test, coll.find()); // subscribe let subCallbackFired = false; @@ -773,31 +773,31 @@ Tinytest.add('livedata stub - reconnect', function(test) { }); // get some data. it shows up. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: '1234', fields: { a: 1 } }); - test.equal(coll.find({}).count(), 1); + test.equal(await coll.find({}).count(), 1); o.expectCallbacks({ added: 1 }); test.isFalse(subCallbackFired); - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: '1234', fields: { b: 2 } }); - stream.receive({ + await stream.receive({ msg: 'ready', subs: [subMessage.id] // satisfy sub }); test.isTrue(subCallbackFired); subCallbackFired = false; // re-arm for test that it doesn't fire again. - test.equal(coll.find({ a: 1, b: 2 }).count(), 1); + test.equal(await coll.find({ a: 1, b: 2 }).count(), 1); o.expectCallbacks({ changed: 1 }); // call method. @@ -823,69 +823,69 @@ Tinytest.add('livedata stub - reconnect', function(test) { test.equal(stream.sent.length, 0); // more data. shows up immediately because there was no relevant method stub. - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: '1234', fields: { c: 3 } }); - test.equal(coll.findOne('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); + test.equal(await coll.findOneAsync('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); o.expectCallbacks({ changed: 1 }); // stream reset. reconnect! we send a connect, our pending method, and our // sub. The wait method still is blocked. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); testGotMessage(test, stream, methodMessage); testGotMessage(test, stream, subMessage); // reconnect with different session id - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); // resend data. doesn't show up: we're in reconnect quiescence. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: '1234', fields: { a: 1, b: 2, c: 3, d: 4 } }); - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: '2345', fields: { e: 5 } }); - test.equal(coll.findOne('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); - test.isFalse(coll.findOne('2345')); + test.equal(await await coll.findOneAsync('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); + test.isFalse(await coll.findOneAsync('2345')); o.expectCallbacks(); // satisfy and return the method - stream.receive({ + await stream.receive({ msg: 'updated', methods: [methodMessage.id] }); test.isFalse(methodCallbackFired); - stream.receive({ msg: 'result', id: methodMessage.id, result: 'bupkis' }); + await stream.receive({ msg: 'result', id: methodMessage.id, result: 'bupkis' }); // The callback still doesn't fire (and we don't send the wait method): we're // still in global quiescence test.isFalse(methodCallbackFired); test.equal(stream.sent.length, 0); // still no update. - test.equal(coll.findOne('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); - test.isFalse(coll.findOne('2345')); + test.equal(await coll.findOneAsync('1234'), { _id: '1234', a: 1, b: 2, c: 3 }); + test.isFalse(await coll.findOneAsync('2345')); o.expectCallbacks(); // re-satisfy sub - stream.receive({ msg: 'ready', subs: [subMessage.id] }); + await stream.receive({ msg: 'ready', subs: [subMessage.id] }); // now the doc changes and method callback is called, and the wait method is // sent. the sub callback isn't re-called. test.isTrue(methodCallbackFired); test.isFalse(subCallbackFired); - test.equal(coll.findOne('1234'), { _id: '1234', a: 1, b: 2, c: 3, d: 4 }); - test.equal(coll.findOne('2345'), { _id: '2345', e: 5 }); + test.equal(await coll.findOneAsync('1234'), { _id: '1234', a: 1, b: 2, c: 3, d: 4 }); + test.equal(await coll.findOneAsync('2345'), { _id: '2345', e: 5 }); o.expectCallbacks({ added: 1, changed: 1 }); let waitMethodMessage = JSON.parse(stream.sent.shift()); @@ -897,9 +897,9 @@ Tinytest.add('livedata stub - reconnect', function(test) { id: waitMethodMessage.id }); test.equal(stream.sent.length, 0); - stream.receive({ msg: 'result', id: waitMethodMessage.id, result: 'bupkis' }); + await stream.receive({ msg: 'result', id: waitMethodMessage.id, result: 'bupkis' }); test.equal(stream.sent.length, 0); - stream.receive({ msg: 'updated', methods: [waitMethodMessage.id] }); + await stream.receive({ msg: 'updated', methods: [waitMethodMessage.id] }); // wait method done means we can send the third method test.equal(stream.sent.length, 1); @@ -916,14 +916,14 @@ Tinytest.add('livedata stub - reconnect', function(test) { }); if (Meteor.isClient) { - Tinytest.add('livedata stub - reconnect non-idempotent method', function( + Tinytest.addAsync('livedata stub - reconnect non-idempotent method', async function( test ) { // This test is for https://github.com/meteor/meteor/issues/6108 const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); let firstMethodCallbackFired = false; let firstMethodCallbackErrored = false; @@ -954,12 +954,12 @@ if (Meteor.isClient) { stream.sent.shift(); stream.sent.shift(); // reconnect - stream.reset(); + await stream.reset(); // verify that a reconnect message was sent. testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); // Make sure that the stream triggers connection. - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); //The method callback should fire even though the stream has not sent a response. //the callback should have been fired with an error. @@ -974,14 +974,14 @@ if (Meteor.isClient) { } function addReconnectTests(name, testFunc) { - Tinytest.add(name + ' (deprecated)', function(test) { + Tinytest.addAsync(name + ' (deprecated)', async function(test) { function deprecatedSetOnReconnect(conn, handler) { conn.onReconnect = handler; } - testFunc.call(this, test, deprecatedSetOnReconnect); + await testFunc.call(this, test, deprecatedSetOnReconnect); }); - Tinytest.add(name, function(test) { + Tinytest.addAsync(name, async function(test) { let stopper; function setOnReconnect(conn, handler) { stopper && stopper.stop(); @@ -991,7 +991,7 @@ function addReconnectTests(name, testFunc) { } }); } - testFunc.call(this, test, setOnReconnect); + await testFunc.call(this, test, setOnReconnect); stopper && stopper.stop(); }); } @@ -999,10 +999,10 @@ function addReconnectTests(name, testFunc) { if (Meteor.isClient) { addReconnectTests( 'livedata stub - reconnect method which only got result', - function(test, setOnReconnect) { + async function(test, setOnReconnect) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); @@ -1034,7 +1034,7 @@ if (Meteor.isClient) { ); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId = coll.findOne({ foo: 'bar' })._id; + const stubWrittenId = await coll.findOneAsync({ foo: 'bar' })._id; o.expectCallbacks({ added: 1 }); // Callback not called. test.equal(callbackOutput, []); @@ -1050,7 +1050,7 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // Get some data. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(stubWrittenId), @@ -1058,17 +1058,17 @@ if (Meteor.isClient) { }); // It doesn't show up yet. test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar' }); o.expectCallbacks(); // Get the result. - stream.receive({ msg: 'result', id: methodId, result: 'bla' }); + await stream.receive({ msg: 'result', id: methodId, result: 'bla' }); // Data unaffected. test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar' }); @@ -1080,11 +1080,11 @@ if (Meteor.isClient) { // Reset stream. Method does NOT get resent, because its result is already // in. Reconnect quiescence happens as soon as 'connected' is received because // there are no pending methods or subs in need of revival. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); // Still holding out hope for session resumption, so nothing updated yet. test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar' }); @@ -1093,18 +1093,18 @@ if (Meteor.isClient) { // Receive 'connected': time for reconnect quiescence! Data gets updated // locally (ie, data is reset) and callback gets called. - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); test.equal(coll.find().count(), 0); o.expectCallbacks({ removed: 1 }); test.equal(callbackOutput, ['bla']); test.equal(onResultReceivedOutput, ['bla']); - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(stubWrittenId), fields: { baz: 42 } }); - test.equal(coll.findOne(stubWrittenId), { _id: stubWrittenId, baz: 42 }); + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, baz: 42 }); o.expectCallbacks({ added: 1 }); // Run method again. We're going to do the same thing this time, except we're @@ -1124,7 +1124,7 @@ if (Meteor.isClient) { ); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId2 = coll.findOne({ foo: 'bar' })._id; + const stubWrittenId2 = await coll.findOneAsync({ foo: 'bar' })._id; o.expectCallbacks({ added: 1 }); // Callback not called. test.equal(callbackOutput, ['bla']); @@ -1140,7 +1140,7 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // Get some data. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(stubWrittenId2), @@ -1148,17 +1148,17 @@ if (Meteor.isClient) { }); // It doesn't show up yet. test.equal(coll.find().count(), 2); - test.equal(coll.findOne(stubWrittenId2), { + test.equal(await coll.findOneAsync(stubWrittenId2), { _id: stubWrittenId2, foo: 'bar' }); o.expectCallbacks(); // Get the result. - stream.receive({ msg: 'result', id: methodId2, result: 'blab' }); + await stream.receive({ msg: 'result', id: methodId2, result: 'blab' }); // Data unaffected. test.equal(coll.find().count(), 2); - test.equal(coll.findOne(stubWrittenId2), { + test.equal(await coll.findOneAsync(stubWrittenId2), { _id: stubWrittenId2, foo: 'bar' }); @@ -1175,7 +1175,7 @@ if (Meteor.isClient) { // Reset stream. Method does NOT get resent, because its result is already in, // but slowMethod gets called via onReconnect. Reconnect quiescence is now // blocking on slowMethod. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID + 1)); const slowMethodId = testGotMessage(test, stream, { msg: 'method', @@ -1185,7 +1185,7 @@ if (Meteor.isClient) { }).id; // Still holding out hope for session resumption, so nothing updated yet. test.equal(coll.find().count(), 2); - test.equal(coll.findOne(stubWrittenId2), { + test.equal(await coll.findOneAsync(stubWrittenId2), { _id: stubWrittenId2, foo: 'bar' }); @@ -1193,9 +1193,9 @@ if (Meteor.isClient) { test.equal(callbackOutput, ['bla']); // Receive 'connected'... but no reconnect quiescence yet due to slowMethod. - stream.receive({ msg: 'connected', session: SESSION_ID + 2 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 2 }); test.equal(coll.find().count(), 2); - test.equal(coll.findOne(stubWrittenId2), { + test.equal(await coll.findOneAsync(stubWrittenId2), { _id: stubWrittenId2, foo: 'bar' }); @@ -1203,7 +1203,7 @@ if (Meteor.isClient) { test.equal(callbackOutput, ['bla']); // Receive data matching our stub. It doesn't take effect yet. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(stubWrittenId2), @@ -1215,9 +1215,9 @@ if (Meteor.isClient) { // slowMethod callback)... ie, a reset followed by applying the data we just // got, as well as calling the callback from the method that half-finished // before reset. The net effect is deleting doc 'stubWrittenId'. - stream.receive({ msg: 'updated', methods: [slowMethodId] }); + await stream.receive({ msg: 'updated', methods: [slowMethodId] }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId2), { + test.equal(await coll.findOneAsync(stubWrittenId2), { _id: stubWrittenId2, foo: 'bar' }); @@ -1225,7 +1225,7 @@ if (Meteor.isClient) { test.equal(callbackOutput, ['bla', 'blab']); // slowMethod returns a value now. - stream.receive({ msg: 'result', id: slowMethodId, result: 'slow' }); + await stream.receive({ msg: 'result', id: slowMethodId, result: 'slow' }); o.expectCallbacks(); test.equal(callbackOutput, ['bla', 'blab', 'slow']); @@ -1233,16 +1233,16 @@ if (Meteor.isClient) { } ); } -Tinytest.add('livedata stub - reconnect method which only got data', function( +Tinytest.addAsync('livedata stub - reconnect method which only got data', async function( test ) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); - const o = observeCursor(test, coll.find()); + const o = await observeCursor(test, coll.find()); // Call a method. We'll get the data-done message but not the result before // reconnect. @@ -1273,7 +1273,7 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( test.equal(stream.sent.length, 0); // Get some data. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: 'photo', @@ -1281,14 +1281,14 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( }); // It shows up instantly because the stub didn't write anything. test.equal(coll.find().count(), 1); - test.equal(coll.findOne('photo'), { _id: 'photo', baz: 42 }); + test.equal(await coll.findOneAsync('photo'), { _id: 'photo', baz: 42 }); o.expectCallbacks({ added: 1 }); // Get the data-done message. - stream.receive({ msg: 'updated', methods: [methodId] }); + await stream.receive({ msg: 'updated', methods: [methodId] }); // Data still here. test.equal(coll.find().count(), 1); - test.equal(coll.findOne('photo'), { _id: 'photo', baz: 42 }); + test.equal(await coll.findOneAsync('photo'), { _id: 'photo', baz: 42 }); o.expectCallbacks(); // Method callback not called yet (no result yet). test.equal(callbackOutput, []); @@ -1296,7 +1296,7 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( // Reset stream. Method gets resent (with same ID), and blocks reconnect // quiescence. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); testGotMessage(test, stream, { msg: 'method', @@ -1306,15 +1306,15 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( }); // Still holding out hope for session resumption, so nothing updated yet. test.equal(coll.find().count(), 1); - test.equal(coll.findOne('photo'), { _id: 'photo', baz: 42 }); + test.equal(await coll.findOneAsync('photo'), { _id: 'photo', baz: 42 }); o.expectCallbacks(); test.equal(callbackOutput, []); test.equal(onResultReceivedOutput, []); // Receive 'connected'. Still blocking on reconnect quiescence. - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne('photo'), { _id: 'photo', baz: 42 }); + test.equal(await coll.findOneAsync('photo'), { _id: 'photo', baz: 42 }); o.expectCallbacks(); test.equal(callbackOutput, []); test.equal(onResultReceivedOutput, []); @@ -1322,12 +1322,12 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( // Receive method result. onResultReceived is called but the main callback // isn't (ie, we don't get confused by the fact that we got data-done the // *FIRST* time through). - stream.receive({ msg: 'result', id: methodId, result: 'res' }); + await stream.receive({ msg: 'result', id: methodId, result: 'res' }); test.equal(callbackOutput, []); test.equal(onResultReceivedOutput, ['res']); // Now we get data-done. Collection is reset and callback is called. - stream.receive({ msg: 'updated', methods: [methodId] }); + await stream.receive({ msg: 'updated', methods: [methodId] }); test.equal(coll.find().count(), 0); o.expectCallbacks({ removed: 1 }); test.equal(callbackOutput, ['res']); @@ -1336,10 +1336,10 @@ Tinytest.add('livedata stub - reconnect method which only got data', function( o.stop(); }); if (Meteor.isClient) { - Tinytest.add('livedata stub - multiple stubs same doc', function(test) { + Tinytest.addAsync('livedata stub - multiple stubs same doc', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); @@ -1361,7 +1361,7 @@ if (Meteor.isClient) { conn.call('insertSomething', _.identity); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId = coll.findOne({ foo: 'bar' })._id; + const stubWrittenId = await coll.findOneAsync({ foo: 'bar' })._id; o.expectCallbacks({ added: 1 }); // Method sent. const insertMethodId = testGotMessage(test, stream, { @@ -1377,7 +1377,7 @@ if (Meteor.isClient) { conn.call('updateIt', stubWrittenId, _.identity); // This stub write is visible too. test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar', baz: 42 @@ -1393,7 +1393,7 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // Get some data... slightly different than what we wrote. - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: MongoID.idStringify(stubWrittenId), @@ -1405,7 +1405,7 @@ if (Meteor.isClient) { }); // It doesn't show up yet. test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar', baz: 42 @@ -1414,9 +1414,9 @@ if (Meteor.isClient) { // And get the first method-done. Still no updates to minimongo: we can't // quiesce the doc until the second method is done. - stream.receive({ msg: 'updated', methods: [insertMethodId] }); + await stream.receive({ msg: 'updated', methods: [insertMethodId] }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar', baz: 42 @@ -1424,7 +1424,7 @@ if (Meteor.isClient) { o.expectCallbacks(); // More data. Not quite what we wrote. Also ignored for now. - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: MongoID.idStringify(stubWrittenId), @@ -1432,7 +1432,7 @@ if (Meteor.isClient) { cleared: ['other'] }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'bar', baz: 42 @@ -1440,9 +1440,9 @@ if (Meteor.isClient) { o.expectCallbacks(); // Second data-ready. Now everything takes effect! - stream.receive({ msg: 'updated', methods: [updateMethodId] }); + await stream.receive({ msg: 'updated', methods: [updateMethodId] }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne(stubWrittenId), { + test.equal(await coll.findOneAsync(stubWrittenId), { _id: stubWrittenId, foo: 'barb', other2: 'bla', @@ -1455,14 +1455,14 @@ if (Meteor.isClient) { } if (Meteor.isClient) { - Tinytest.add( + Tinytest.addAsync( "livedata stub - unsent methods don't block quiescence", - function(test) { + async function(test) { // This test is for https://github.com/meteor/meteor/issues/555 const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); @@ -1485,7 +1485,7 @@ if (Meteor.isClient) { // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId = coll.findOne({ foo: 'bar' })._id; + const stubWrittenId = await coll.findOneAsync({ foo: 'bar' })._id; // first method sent const firstMethodId = testGotMessage(test, stream, { @@ -1497,8 +1497,8 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // ack the first method - stream.receive({ msg: 'updated', methods: [firstMethodId] }); - stream.receive({ msg: 'result', id: firstMethodId }); + await stream.receive({ msg: 'updated', methods: [firstMethodId] }); + await stream.receive({ msg: 'result', id: firstMethodId }); // Wait method sent. const waitMethodId = testGotMessage(test, stream, { @@ -1510,8 +1510,8 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // ack the wait method - stream.receive({ msg: 'updated', methods: [waitMethodId] }); - stream.receive({ msg: 'result', id: waitMethodId }); + await stream.receive({ msg: 'updated', methods: [waitMethodId] }); + await stream.receive({ msg: 'result', id: waitMethodId }); // insert method sent. const insertMethodId = testGotMessage(test, stream, { @@ -1524,19 +1524,19 @@ if (Meteor.isClient) { test.equal(stream.sent.length, 0); // ack the insert method - stream.receive({ msg: 'updated', methods: [insertMethodId] }); - stream.receive({ msg: 'result', id: insertMethodId }); + await stream.receive({ msg: 'updated', methods: [insertMethodId] }); + await stream.receive({ msg: 'result', id: insertMethodId }); // simulation reverted. test.equal(coll.find({ foo: 'bar' }).count(), 0); } ); } -Tinytest.add('livedata stub - reactive resub', function(test) { +Tinytest.addAsync('livedata stub - reactive resub', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const readiedSubs = {}; const markAllReady = function() { @@ -1627,10 +1627,10 @@ Tinytest.add('livedata connection - reactive userId', function(test) { test.equal(conn.userId(), 1337); }); -Tinytest.add('livedata connection - two wait methods', function(test) { +Tinytest.addAsync('livedata connection - two wait methods', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); @@ -1673,19 +1673,19 @@ Tinytest.add('livedata connection - two wait methods', function(test) { // Receive some data. "one" is not a wait method and there are no stubs, so it // gets applied immediately. test.equal(coll.find().count(), 0); - stream.receive({ + await stream.receive({ msg: 'added', collection: collName, id: 'foo', fields: { x: 1 } }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne('foo'), { _id: 'foo', x: 1 }); + test.equal(await coll.findOneAsync('foo'), { _id: 'foo', x: 1 }); // Let "one!" finish. Both messages are required to fire the callback. - stream.receive({ msg: 'result', id: one_message.id }); + await stream.receive({ msg: 'result', id: one_message.id }); test.equal(responses, []); - stream.receive({ msg: 'updated', methods: [one_message.id] }); + await stream.receive({ msg: 'updated', methods: [one_message.id] }); test.equal(responses, ['one']); // Now we've send out "two!". @@ -1697,23 +1697,23 @@ Tinytest.add('livedata connection - two wait methods', function(test) { // Receive more data. "two" is a wait method, so the data doesn't get applied // yet. - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: 'foo', fields: { y: 3 } }); test.equal(coll.find().count(), 1); - test.equal(coll.findOne('foo'), { _id: 'foo', x: 1 }); + test.equal(await coll.findOneAsync('foo'), { _id: 'foo', x: 1 }); // Let "two!" finish, with its end messages in the opposite order to "one!". - stream.receive({ msg: 'updated', methods: [two_message.id] }); + await stream.receive({ msg: 'updated', methods: [two_message.id] }); test.equal(responses, ['one']); test.equal(stream.sent.length, 0); // data-done message is enough to allow data to be written. test.equal(coll.find().count(), 1); - test.equal(coll.findOne('foo'), { _id: 'foo', x: 1, y: 3 }); - stream.receive({ msg: 'result', id: two_message.id }); + test.equal(await coll.findOneAsync('foo'), { _id: 'foo', x: 1, y: 3 }); + await stream.receive({ msg: 'result', id: two_message.id }); test.equal(responses, ['one', 'two']); // Verify that we just sent "three!" and "four!" now that we got @@ -1725,14 +1725,14 @@ Tinytest.add('livedata connection - two wait methods', function(test) { test.equal(four_message.params, ['four!']); // Out of order response is OK for non-wait methods. - stream.receive({ msg: 'result', id: three_message.id }); - stream.receive({ msg: 'result', id: four_message.id }); - stream.receive({ msg: 'updated', methods: [four_message.id] }); + await stream.receive({ msg: 'result', id: three_message.id }); + await stream.receive({ msg: 'result', id: four_message.id }); + await stream.receive({ msg: 'updated', methods: [four_message.id] }); test.equal(responses, ['one', 'two', 'four']); test.equal(stream.sent.length, 0); // Let three finish too. - stream.receive({ msg: 'updated', methods: [three_message.id] }); + await stream.receive({ msg: 'updated', methods: [three_message.id] }); test.equal(responses, ['one', 'two', 'four', 'three']); // Verify that we just sent "five!" (the next wait method). @@ -1742,8 +1742,8 @@ Tinytest.add('livedata connection - two wait methods', function(test) { test.equal(responses, ['one', 'two', 'four', 'three']); // Let five finish. - stream.receive({ msg: 'result', id: five_message.id }); - stream.receive({ msg: 'updated', methods: [five_message.id] }); + await stream.receive({ msg: 'result', id: five_message.id }); + await stream.receive({ msg: 'updated', methods: [five_message.id] }); test.equal(responses, ['one', 'two', 'four', 'three', 'five']); let six_message = JSON.parse(stream.sent.shift()); @@ -1752,10 +1752,10 @@ Tinytest.add('livedata connection - two wait methods', function(test) { addReconnectTests( 'livedata connection - onReconnect prepends messages correctly with a wait method', - function(test, setOnReconnect) { + async function(test, setOnReconnect) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // setup method conn.methods({ do_something: function(x) {} }); @@ -1773,7 +1773,7 @@ addReconnectTests( // reconnect stream.sent = []; - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(conn._lastSessionId)); // Test that we sent what we expect to send, and we're blocked on @@ -1807,22 +1807,22 @@ addReconnectTests( } ); -Tinytest.add('livedata connection - ping without id', function(test) { +Tinytest.addAsync('livedata connection - ping without id', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); - stream.receive({ msg: 'ping' }); + await stream.receive({ msg: 'ping' }); testGotMessage(test, stream, { msg: 'pong' }); }); -Tinytest.add('livedata connection - ping with id', function(test) { +Tinytest.addAsync('livedata connection - ping with id', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const id = Random.id(); - stream.receive({ msg: 'ping', id: id }); + await stream.receive({ msg: 'ping', id: id }); testGotMessage(test, stream, { msg: 'pong', id: id }); }); @@ -1978,10 +1978,10 @@ Tinytest.addAsync('livedata connection - version negotiation error', function( addReconnectTests( 'livedata connection - onReconnect prepends messages correctly without a wait method', - function(test, setOnReconnect) { + async function(test, setOnReconnect) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // setup method conn.methods({ do_something: function(x) {} }); @@ -1999,7 +1999,7 @@ addReconnectTests( // reconnect stream.sent = []; - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(conn._lastSessionId)); // Test that we sent what we expect to send, and we're blocked on @@ -2034,10 +2034,10 @@ addReconnectTests( addReconnectTests( 'livedata connection - onReconnect with sent messages', - function(test, setOnReconnect) { + async function(test, setOnReconnect) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // setup method conn.methods({ do_something: function(x) {} }); @@ -2050,7 +2050,7 @@ addReconnectTests( // initial connect stream.sent = []; - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(conn._lastSessionId)); // Test that we sent just the login message. @@ -2062,15 +2062,15 @@ addReconnectTests( }).id; // we connect. - stream.receive({ msg: 'connected', session: Random.id() }); + await stream.receive({ msg: 'connected', session: Random.id() }); test.length(stream.sent, 0); // login got result (but not yet data) - stream.receive({ msg: 'result', id: loginId, result: 'foo' }); + await stream.receive({ msg: 'result', id: loginId, result: 'foo' }); test.length(stream.sent, 0); // login got data. now we send next method. - stream.receive({ msg: 'updated', methods: [loginId] }); + await stream.receive({ msg: 'updated', methods: [loginId] }); testGotMessage(test, stream, { msg: 'method', @@ -2081,13 +2081,13 @@ addReconnectTests( } ); -addReconnectTests('livedata stub - reconnect double wait method', function( +addReconnectTests('livedata stub - reconnect double wait method', async function( test, setOnReconnect ) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const output = []; setOnReconnect(conn, function() { @@ -2111,13 +2111,13 @@ addReconnectTests('livedata stub - reconnect double wait method', function( test.equal(stream.sent.length, 0); // Get the result. This means it will not be resent. - stream.receive({ msg: 'result', id: halfwayId, result: 'bla' }); + await stream.receive({ msg: 'result', id: halfwayId, result: 'bla' }); // Callback not called. test.equal(output, []); // Reset stream. halfwayMethod does NOT get resent, but reconnectMethod does! // Reconnect quiescence happens when reconnectMethod is done. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); const reconnectId = testGotMessage(test, stream, { msg: 'method', @@ -2131,18 +2131,18 @@ addReconnectTests('livedata stub - reconnect double wait method', function( // Receive 'connected', but reconnect quiescence is blocking on // reconnectMethod. - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); test.equal(output, []); // Data-done for reconnectMethod. This gets us to reconnect quiescence, so // halfwayMethod's callback fires. reconnectMethod's is still waiting on its // result. - stream.receive({ msg: 'updated', methods: [reconnectId] }); + await stream.receive({ msg: 'updated', methods: [reconnectId] }); test.equal(output.shift(), 'halfway'); test.equal(output, []); // Get result of reconnectMethod. Its callback fires. - stream.receive({ msg: 'result', id: reconnectId, result: 'foo' }); + await stream.receive({ msg: 'result', id: reconnectId, result: 'foo' }); test.equal(output.shift(), 'reconnect'); test.equal(output, []); @@ -2158,11 +2158,11 @@ addReconnectTests('livedata stub - reconnect double wait method', function( }); }); -Tinytest.add('livedata stub - subscribe errors', function(test) { +Tinytest.addAsync('livedata stub - subscribe errors', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // subscribe let onReadyFired = false; @@ -2202,7 +2202,7 @@ Tinytest.add('livedata stub - subscribe errors', function(test) { }); // Reject the sub. - stream.receive({ + await stream.receive({ msg: 'nosub', id: subMessage.id, error: new Meteor.Error(404, 'Subscription not found') @@ -2221,7 +2221,7 @@ Tinytest.add('livedata stub - subscribe errors', function(test) { test.equal(subErrorInError.reason, 'Subscription not found'); // stream reset: reconnect! - stream.reset(); + await stream.reset(); // We send a connect. testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); // We should NOT re-sub to the sub, because we processed the error. @@ -2229,11 +2229,11 @@ Tinytest.add('livedata stub - subscribe errors', function(test) { test.isFalse(onReadyFired); }); -Tinytest.add('livedata stub - subscribe stop', function(test) { +Tinytest.addAsync('livedata stub - subscribe stop', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); // subscribe let onReadyFired = false; @@ -2256,7 +2256,7 @@ Tinytest.add('livedata stub - subscribe stop', function(test) { }); if (Meteor.isClient) { - Tinytest.add('livedata stub - stubs before connected', function(test) { + Tinytest.addAsync('livedata stub - stubs before connected', async function(test) { const stream = new StubStream(); const conn = newConnection(stream); @@ -2264,7 +2264,7 @@ if (Meteor.isClient) { const coll = new Mongo.Collection(collName, { connection: conn }); // Start and send "connect", but DON'T get 'connected' quite yet. - stream.reset(); // initial connection start. + await stream.reset(); // initial connection start. testGotMessage(test, stream, makeConnectMessage()); test.length(stream.sent, 0); @@ -2272,7 +2272,7 @@ if (Meteor.isClient) { // Insert a document. The stub updates "conn" directly. coll.insert({ _id: 'foo', bar: 42 }, _.identity); test.equal(coll.find().count(), 1); - test.equal(coll.findOne(), { _id: 'foo', bar: 42 }); + test.equal(await coll.findOneAsync(), { _id: 'foo', bar: 42 }); // It also sends the method message. let methodMessage = JSON.parse(stream.sent.shift()); test.isUndefined(methodMessage.randomSeed); @@ -2286,33 +2286,33 @@ if (Meteor.isClient) { // Now receive a connected message. This should not clear the // _documentsWrittenByStub state! - stream.receive({ msg: 'connected', session: SESSION_ID }); + await stream.receive({ msg: 'connected', session: SESSION_ID }); test.length(stream.sent, 0); test.equal(coll.find().count(), 1); // Now receive the "updated" message for the method. This should revert the // insert. - stream.receive({ msg: 'updated', methods: [methodMessage.id] }); + await stream.receive({ msg: 'updated', methods: [methodMessage.id] }); test.length(stream.sent, 0); test.equal(coll.find().count(), 0); }); } if (Meteor.isClient) { - Tinytest.add( + Tinytest.addAsync ( 'livedata stub - method call between reset and quiescence', - function(test) { + async function(test) { const stream = new StubStream(); const conn = newConnection(stream); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); conn.methods({ - update_value: function() { - coll.update('aaa', { value: 222 }); + update_value: async function() { + await coll.updateAsync('aaa', { value: 222 }); } }); @@ -2336,23 +2336,23 @@ if (Meteor.isClient) { const subReadyMessage = { msg: 'ready', subs: [subMessage.id] }; - stream.receive(subDocMessage); - stream.receive(subReadyMessage); - test.isTrue(coll.findOne('aaa').value == 111); + await stream.receive(subDocMessage); + await stream.receive(subReadyMessage); + test.isTrue(await coll.findOneAsync('aaa').value == 111); // Initiate reconnect. - stream.reset(); + await stream.reset(); testGotMessage(test, stream, makeConnectMessage(SESSION_ID)); testGotMessage(test, stream, subMessage); - stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); + await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); // Now in reconnect, can still see the document. - test.isTrue(coll.findOne('aaa').value == 111); + test.isTrue(await coll.findOneAsync('aaa').value == 111); - conn.call('update_value'); + await conn.callAsync('update_value'); // Observe the stub-written value. - test.isTrue(coll.findOne('aaa').value == 222); + test.isTrue(await coll.findOneAsync('aaa').value == 222); let methodMessage = JSON.parse(stream.sent.shift()); test.equal(methodMessage, { @@ -2363,29 +2363,29 @@ if (Meteor.isClient) { }); test.length(stream.sent, 0); - stream.receive(subDocMessage); - stream.receive(subReadyMessage); + await stream.receive(subDocMessage); + await stream.receive(subReadyMessage); // By this point quiescence is reached and stores have been reset. // The stub-written value is still there. - test.isTrue(coll.findOne('aaa').value == 222); + test.isTrue(await coll.findOneAsync('aaa').value == 222); - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: 'aaa', fields: { value: 333 } }); - stream.receive({ msg: 'updated', methods: [methodMessage.id] }); - stream.receive({ msg: 'result', id: methodMessage.id, result: null }); + await stream.receive({ msg: 'updated', methods: [methodMessage.id] }); + await stream.receive({ msg: 'result', id: methodMessage.id, result: null }); // Server wrote a different value, make sure it's visible now. - test.isTrue(coll.findOne('aaa').value == 333); + test.isTrue(await coll.findOneAsync('aaa').value == 333); } ); - Tinytest.add('livedata stub - buffering and methods interaction', function( + Tinytest.addAsync('livedata stub - buffering and methods interaction', async function( test ) { const stream = new StubStream(); @@ -2395,14 +2395,14 @@ if (Meteor.isClient) { bufferedWritesMaxAge: 10000 }); - startAndConnect(test, stream); + await startAndConnect(test, stream); const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); conn.methods({ - update_value: function() { - const value = coll.findOne('aaa').subscription; + update_value: async function() { + const value = await coll.findOneAsync('aaa').subscription; // Method should have access to the latest value of the collection. coll.update('aaa', { $set: { method: value + 110 } }); } @@ -2428,9 +2428,9 @@ if (Meteor.isClient) { const subReadyMessage = { msg: 'ready', subs: [subMessage.id] }; - stream.receive(subDocMessage); - stream.receive(subReadyMessage); - test.equal(coll.findOne('aaa').subscription, 111); + await stream.receive(subDocMessage); + await stream.receive(subReadyMessage); + test.equal(await coll.findOneAsync('aaa').subscription, 111); const subDocChangeMessage = { msg: 'changed', @@ -2439,18 +2439,18 @@ if (Meteor.isClient) { fields: { subscription: 112 } }; - stream.receive(subDocChangeMessage); + await stream.receive(subDocChangeMessage); // Still 111 because buffer has not been flushed. - test.equal(coll.findOne('aaa').subscription, 111); + test.equal(await coll.findOneAsync('aaa').subscription, 111); // Call updates the stub. - conn.call('update_value'); + await conn.callAsync('update_value'); // Observe the stub-written value. - test.equal(coll.findOne('aaa').method, 222); + test.equal(await coll.findOneAsync('aaa').method, 222); // subscription field is updated to the latest value // because of the method call. - test.equal(coll.findOne('aaa').subscription, 112); + test.equal(await coll.findOneAsync('aaa').subscription, 112); let methodMessage = JSON.parse(stream.sent.shift()); test.equal(methodMessage, { @@ -2464,23 +2464,23 @@ if (Meteor.isClient) { // "Server-side" change from the method arrives and method returns. // With potentially fixed value for method field, if stub didn't // use 112 as the subscription field value. - stream.receive({ + await stream.receive({ msg: 'changed', collection: collName, id: 'aaa', fields: { method: 222 } }); - stream.receive({ msg: 'updated', methods: [methodMessage.id] }); - stream.receive({ msg: 'result', id: methodMessage.id, result: null }); + await stream.receive({ msg: 'updated', methods: [methodMessage.id] }); + await stream.receive({ msg: 'result', id: methodMessage.id, result: null }); - test.equal(coll.findOne('aaa').method, 222); - test.equal(coll.findOne('aaa').subscription, 112); + test.equal(await coll.findOneAsync('aaa').method, 222); + test.equal(await coll.findOneAsync('aaa').subscription, 112); // Buffer should already be flushed because of a non-update message. // And after a flush we really want subscription field to be 112. conn._flushBufferedWrites(); - test.equal(coll.findOne('aaa').method, 222); - test.equal(coll.findOne('aaa').subscription, 112); + test.equal(await coll.findOneAsync('aaa').method, 222); + test.equal(await coll.findOneAsync('aaa').subscription, 112); }); } diff --git a/packages/ddp-client/test/stub_stream.js b/packages/ddp-client/test/stub_stream.js index 1b0186a348..d65990055d 100644 --- a/packages/ddp-client/test/stub_stream.js +++ b/packages/ddp-client/test/stub_stream.js @@ -32,23 +32,23 @@ _.extend(StubStream.prototype, { }, // Methods for tests - receive: function(data) { + receive: async function(data) { const self = this; if (typeof data === 'object') { data = EJSON.stringify(data); } - _.each(self.callbacks['message'], function(cb) { - cb(data); - }); + for (const cb of self.callbacks['message']) { + await cb(data); + } }, - reset: function() { + reset: async function() { const self = this; - _.each(self.callbacks['reset'], function(cb) { - cb(); - }); + for (const cb of self.callbacks['reset']) { + await cb(); + } }, // Provide a tag to detect stub streams. diff --git a/packages/meteor/async_helpers.js b/packages/meteor/async_helpers.js index e326265c03..7be1653c76 100644 --- a/packages/meteor/async_helpers.js +++ b/packages/meteor/async_helpers.js @@ -35,36 +35,22 @@ class AsynchronousQueue { this._draining = false; } - queueTask(task) { + async queueTask(task) { this._taskHandles.push({ task: task, name: task.name }); - return this._scheduleRun(); + await this._scheduleRun(); } - _scheduleRun() { + async _scheduleRun() { // Already running or scheduled? Do nothing. if (this._runningOrRunScheduled) return; this._runningOrRunScheduled = true; - let resolver; - const returnValue = new Promise(r => resolver = r); - setImmediate(() => { - Meteor._runAsync(async () => { - await this._run(); - - if (!resolver) { - throw new Error("Resolver not found for task"); - } - - resolver(); - }); - }); - - return returnValue; + await this._run(); } async _run() { @@ -91,7 +77,7 @@ class AsynchronousQueue { await this._scheduleRun(); } - runTask(task) { + async runTask(task) { const handle = { task: Meteor.bindEnvironment(task, function(e) { Meteor._debug('Exception from task', e); @@ -100,7 +86,7 @@ class AsynchronousQueue { name: task.name }; this._taskHandles.push(handle); - return this._scheduleRun(); + await this._scheduleRun(); } flush() { diff --git a/packages/meteor/dynamics_nodejs.js b/packages/meteor/dynamics_nodejs.js index 62ea44205c..8d2f3f9406 100644 --- a/packages/meteor/dynamics_nodejs.js +++ b/packages/meteor/dynamics_nodejs.js @@ -245,12 +245,12 @@ const bindEnvironmentAsync = (func, onException, _this) => { async () => { let ret; try { - Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, dynamics); + if (currentSlot) { + Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, dynamics); + } ret = await func.apply(_this, args); } catch (e) { onException(e); - } finally { - Meteor._updateAslStore(CURRENT_VALUE_KEY_NAME, undefined); } return ret; }, From a720c329c4b4229f2c34f0a87a8d3436956fb70a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:38:59 -0300 Subject: [PATCH 231/292] chore: updated shrink json --- packages/babel-compiler/.npm/package/npm-shrinkwrap.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 248dfa3f33..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -436,9 +436,9 @@ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.17.1-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.1-beta.0.tgz", - "integrity": "sha512-ogXjGkuWbH1YwHXX3VOOjonC9aENrijkj0j6NZtDuKBq3pt0nSULvpU5fRjKu1HjgmhRFky6uE4TYa9FtlCKlQ==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", From 2e1e500dd0cbf89a628b795d57930679fb11467d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:39:10 -0300 Subject: [PATCH 232/292] tests: reverted shell tests --- tools/tests/shell-tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/tests/shell-tests.js b/tools/tests/shell-tests.js index e227420589..037106c245 100644 --- a/tools/tests/shell-tests.js +++ b/tools/tests/shell-tests.js @@ -12,10 +12,10 @@ selftest.define("meteor shell", function () { var shell = s.run("shell"); // First try a simple one-line expression. - shell.write("{server:Meteor.isServer}\n"); + shell.write("({server:Meteor.isServer})\n"); shell.proc.stdin.end(); - shell.waitSecs(20); - shell.match('{ server: true }'); + shell.waitSecs(10); + shell.match('{"server":true}'); shell.expectExit(0); shell = s.run("shell"); From 6177dc0fb3c25b7967374a9f622d4f5840036ccc Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 21:39:41 -0300 Subject: [PATCH 233/292] tests: changed how to create prompt --- tools/cli/commands.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index c729511e9c..22ffdebaeb 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1,7 +1,5 @@ var main = require('./main.js'); var _ = require('underscore'); -const readline = require('readline') - .createInterface({ input: process.stdin, output: process.stdout }); var files = require('../fs/files'); var deploy = require('../meteor-services/deploy.js'); var buildmessage = require('../utils/buildmessage.js'); @@ -2549,10 +2547,12 @@ main.registerCommand({ /** * * @param question - * @returns {Promise} + * @returns {function(string): Promise} */ -const ask = async (question) => { - return new Promise((resolve, reject) => { +const createPrompt = () => { + const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); + return async (question) => new Promise((resolve, reject) => { readline.question(question, (answer) => { resolve(answer); }) @@ -2614,6 +2614,7 @@ main.registerCommand({ const setup = async (arg0) => { if (arg0 === undefined) { + const ask = createPrompt(); // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); checkScaffoldName(scaffoldName); From 582377be50cd4241a7ccb4d02692521098ac3a5e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 6 Dec 2022 23:14:17 -0300 Subject: [PATCH 234/292] tests: testing something in the CI --- packages/test-in-console/puppeteerRunner.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index a2d07f633f..2db0a0e7a4 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -4,9 +4,7 @@ async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - if (msg._text !== undefined) { - console.log(msg._text); - } + console.log(msg._text); }); if (!process.env.URL) { From 908d29b2664f4948393d15da66baca9e12f4f0c0 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 00:09:40 -0300 Subject: [PATCH 235/292] test: update to solution --- packages/test-in-console/puppeteerRunner.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index 2db0a0e7a4..c8c8d58ac7 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,10 +1,15 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); +let testNumber = 0; async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - console.log(msg._text); + // this is a way to make sure the travis does not timeout + // if the test is running for too long without any output to the console (10 minutes) + if (msg._text !== undefined) console.log(msg._text); + else console.log(`Test number ${testNumber}`); + testNumber++; }); if (!process.env.URL) { From c5a81188c62058c5a5ef119b9039133c7739acad Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 00:30:26 -0300 Subject: [PATCH 236/292] test: formated code and adjusted codestyle --- packages/test-in-console/puppeteerRunner.js | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index c8c8d58ac7..c6509bd93d 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,6 +1,7 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); let testNumber = 0; + async function runNextUrl(browser) { const page = await browser.newPage(); @@ -8,7 +9,7 @@ async function runNextUrl(browser) { // this is a way to make sure the travis does not timeout // if the test is running for too long without any output to the console (10 minutes) if (msg._text !== undefined) console.log(msg._text); - else console.log(`Test number ${testNumber}`); + else console.log(`Test number: ${ testNumber }`); testNumber++; }); @@ -22,11 +23,15 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(`Tests complete with ${failCount} failures`); - console.log(`Tests complete with ${await getPassCount(page)} passes`); + console.log(` + The number of tests from Test number may be different because + of the way the test is written. causing the test to fail or + to run more than once. in the console. Test number total: ${ testNumber }`); + console.log(`Tests complete with ${ failCount } failures`); + console.log(`Tests complete with ${ await getPassCount(page) } passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); + failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); await page.close(); await browser.close(); process.exit(1); @@ -49,7 +54,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -64,7 +69,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -79,7 +84,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -98,7 +103,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -107,11 +112,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${process.env.URL}`); + console.log(`Running test with Puppeteer at ${ process.env.URL }`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${await browser.version()}`); + console.log(`Using version: ${ await browser.version() }`); runNextUrl(browser); } From 9461b5c67760fa581afcd38107c070d2662dde71 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:03:36 -0300 Subject: [PATCH 237/292] docs: reverted babel feature --- docs/history.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docs/history.md b/docs/history.md index 5bc2fec0f5..346edbfca1 100644 --- a/docs/history.md +++ b/docs/history.md @@ -29,13 +29,8 @@ * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) * `eslint-plugin-meteor@7.4.0`: - updated Typescript deps and meteor babel -* `meteorjs/babel@7.17.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 * `accounts-base@2.2.6` - Moved some functions to accounts-oauth. * `accounts-oauth@1.4.2` @@ -121,9 +116,6 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) From 20506ec6bc9ec2636ce6b06b1d15ea5019e63eb6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:04:06 -0300 Subject: [PATCH 238/292] docs: adjust docs to not use I --- docs/source/commandline.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index cbc61b8e86..c7d9f07796 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -273,10 +273,6 @@ Meteor.methods({ import { Meteor } from 'meteor/meteor'; import { CustomerCollection } from './collection'; -Meteor.publish('CustomersByLoggedUser', function publishCustomersByUserId() { - return CustomerCollection.find({ userId: this.userId }); -}); - Meteor.publish('allCustomers', function publishCustomers() { return CustomerCollection.find({}); }); @@ -307,7 +303,7 @@ Also, there is the same version of these methods using TypeScript, that will be

path option

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

how do I rename things?

+

how to rename things?

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

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

+

How to bring your own templates?

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

meteor generate

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

collection.js

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

publication.js

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

index.js

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

path option

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

Using the Wizard

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

how to rename things?

+

How to rename things?

Out of the box is provided a few functions such as replacing ``$$name$$``, ``$$PascalName$$`` and ``$$camelName$$`` these replacements come from this function: -_note that scaffoldName is the name that you have passed as argument_ +_Note that scaffoldName is the name that you have passed as argument_ ```js const transformName = (name) => { @@ -471,12 +464,12 @@ export function transformContents(scaffoldName, contents, fileName) { } ``` -if you run your command like this: +If you run your command like this: ```bash meteor generate feed --replaceFn=/fn/replace.js ``` -it will generate files full of ``$$PascalCase$$``using the meteor provided templates. +It will generate files full of ``$$PascalCase$$``using the meteor provided templates. A better example of this feature would be the following js file: ```js From 9377b9e3ed3425228d5f4fd3ea1a15470918fc94 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:24:42 -0300 Subject: [PATCH 240/292] chore: updated to async scaffolds functions --- tools/static-assets/scaffolds-ts/methods.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts index 538010c1c6..d36e1cd42c 100644 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -3,21 +3,21 @@ import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import { $$PascalName$$, $$PascalName$$Collection } from './collection'; -export function create(data: $$PascalName$$) { +export async function create(data: $$PascalName$$) { return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { +export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { check(_id, String); return $$PascalName$$Collection.updateAsync(_id, { ...data }); } -export function remove(_id: string) { +export async function remove(_id: string) { check(_id, String); return $$PascalName$$Collection.removeAsync(_id); } -export function findById(_id: string) { +export async function findById(_id: string) { check(_id, String); return $$PascalName$$Collection.findOneAsync(_id); } From a9fcd3695b516665acd6fa6124e0100b862adf5e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:24:47 -0300 Subject: [PATCH 241/292] chore: updated to async scaffolds functions in js --- tools/static-assets/scaffolds-js/methods.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js index 1b7156c792..415f0ebb0a 100644 --- a/tools/static-assets/scaffolds-js/methods.js +++ b/tools/static-assets/scaffolds-js/methods.js @@ -2,21 +2,21 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { $$PascalName$$Collection } from './collection'; -export function create(data) { +export async function create(data) { return $$PascalName$$Collection.insertAsync({ ...data }); } -export function update(_id, data) { +export async function update(_id, data) { check(_id, String); return $$PascalName$$Collection.updateAsync(_id, { ...data }); } -export function remove(_id) { +export async function remove(_id) { check(_id, String); return $$PascalName$$Collection.removeAsync(_id); } -export function findById(_id) { +export async function findById(_id) { check(_id, String); return $$PascalName$$Collection.findOneAsync(_id); } From 3ecc388e8d32a81c516a15268e936843429d2b8f Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:25:01 -0300 Subject: [PATCH 242/292] docs: updated to async scaffolds functions --- docs/source/commandline.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/commandline.md b/docs/source/commandline.md index 4bc88ae0aa..ebb9381d3a 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -234,21 +234,21 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { CustomerCollection } from './collection'; -export function create(data) { +export async function create(data) { return CustomerCollection.insertAsync({ ...data }); } -export function update(_id, data) { +export async function update(_id, data) { check(_id, String); return CustomerCollection.updateAsync(_id, { ...data }); } -export function remove(_id) { +export async function remove(_id) { check(_id, String); return CustomerCollection.removeAsync(_id); } -export function findById(_id) { +export async function findById(_id) { check(_id, String); return CustomerCollection.findOneAsync(_id); } @@ -334,21 +334,21 @@ import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import { AnotherCustomer, AnotherCustomerCollection } from './collection'; -export function create(data: AnotherCustomer) { +export async function create(data: AnotherCustomer) { return AnotherCustomerCollection.insertAsync({ ...data }); } -export function update(_id: string, data: Mongo.Modifier) { +export async function update(_id: string, data: Mongo.Modifier) { check(_id, String); return AnotherCustomerCollection.updateAsync(_id, { ...data }); } -export function remove(_id: string) { +export async function remove(_id: string) { check(_id, String); return AnotherCustomerCollection.removeAsync(_id); } -export function findById(_id: string) { +export async function findById(_id: string) { check(_id, String); return AnotherCustomerCollection.findOneAsync(_id); } From 48b6e9ca46ad3b9072729b8d8ec425bb6a4399e7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 10:28:32 -0300 Subject: [PATCH 243/292] Meteor version to 2.9.0 :comet: --- packages/accounts-base/package.js | 2 +- packages/accounts-oauth/package.js | 2 +- packages/accounts-password/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/ecmascript/package.js | 2 +- packages/email/package.js | 2 +- packages/facebook-oauth/package.js | 2 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/package.js | 2 +- packages/meteor-developer-oauth/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/meteor/package.js | 2 +- packages/minifier-css/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- packages/npm-mongo/package.js | 2 +- packages/oauth/package.js | 2 +- packages/oauth1/package.js | 2 +- packages/oauth2/package.js | 2 +- packages/package-version-parser/package.js | 2 +- packages/promise/package.js | 2 +- packages/standard-minifier-css/package.js | 2 +- packages/test-helpers/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/tinytest/package.js | 2 +- packages/twitter-oauth/package.js | 2 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 5e3e313715..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6-rc290.11', + version: '2.2.6', }); Package.onUse(api => { diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index 05e6f22fe7..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2-rc290.11", + version: "1.4.2", }); Package.onUse(api => { diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 96e8d9af97..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2-rc290.11', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 53664bf356..a3ecdbed82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,7 +1,7 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1-rc290.11' + version: '7.10.1' }); Npm.depends({ diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index d2ffb02434..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4-rc290.11', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/package.js b/packages/email/package.js index 947a49d19d..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3-rc290.11', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 82bfe9999f..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2-rc290.11' + version: '1.11.2' }); Package.onUse(api => { diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index f0463ace26..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1-rc290.11' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index c2503db373..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3-rc290.11", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 9476455dea..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2-rc290.11' + version: '1.1.2' }); Package.onUse(api => { diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 216cbe14bb..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2-rc290.11' + version: '1.3.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 788aa39f16..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0-rc.11', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 11fa4d2e1f..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3-rc290.11' + version: '1.10.3' }); Package.registerBuildPlugin({ diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 0e1c67b833..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2-rc290.11' + version: '1.6.2' }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 9f03acbcaa..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1-rc290.11' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index cc0a0789e2..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3-rc290.11' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 6c8b37b275..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,7 +3,7 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1-rc290.11', + version: '4.12.1', documentation: null }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8f07f1c302..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3-rc290.11" + version: "2.1.3" }); Package.onUse(api => { diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 0b6a54db9a..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1-rc290.11", + version: "1.5.1", }); Package.onUse(api => { diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index e37609c30c..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2-rc290.11", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 507a91f383..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1-rc290.11" + version: "3.2.1" }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bba347be62..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2-rc290.11", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 319f504d5f..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3-rc290.11', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index c0a4593856..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1-rc290.11' + version: '1.3.1' }); Package.onUse(function (api) { diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index d6e032eda0..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2-rc290.11', + version: '1.3.2', documentation: null }); diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 4df49926f6..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2-rc290.11' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index e239da705d..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2-rc290.11' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/typescript/package.js b/packages/typescript/package.js index fc46024760..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4-rc290.11', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 9beb6e14a2..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2-rc290.11", + version: "1.3.2", }); Package.onUse(api => { diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 0a951d5127..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0-rc.11", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" From 5164930456ef3e2116e636ccc69ea8478762b89a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 13:48:36 -0300 Subject: [PATCH 244/292] =?UTF-8?q?Meteor=20version=20to=202.9.0=C2=A0:com?= =?UTF-8?q?et:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/admin/meteor-release-official.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..27a0c865e4 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.9.0", "recommended": false, "official": true, "description": "The Official Meteor Distribution" From 1fc3d0cd6492b7f60d50a21655b86fc77ac7d630 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 7 Dec 2022 14:19:25 -0400 Subject: [PATCH 245/292] fixing livedata stub and livedata connection tests --- .../test/livedata_connection_tests.js | 46 +++++++++---------- .../ddp-client/test/livedata_test_service.js | 15 +++--- packages/ddp-client/test/livedata_tests.js | 34 +++++++------- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/packages/ddp-client/test/livedata_connection_tests.js b/packages/ddp-client/test/livedata_connection_tests.js index 3b9d4ce904..58bc55bd59 100644 --- a/packages/ddp-client/test/livedata_connection_tests.js +++ b/packages/ddp-client/test/livedata_connection_tests.js @@ -477,8 +477,8 @@ if (Meteor.isClient) { // setup method conn.methods({ - do_something: async function(x) { - await coll.insertAsync({ value: x }); + do_something: function(x) { + coll.insert({ value: x }); } }); @@ -522,7 +522,7 @@ if (Meteor.isClient) { test.equal(await coll.find({}).count(), 1); test.equal(await coll.find({ value: 'friday!' }).count(), 1); - const docId = await coll.findOneAsync({ value: 'friday!' })._id; + const docId = (await coll.findOneAsync({ value: 'friday!' }))._id; // results does not yet result in callback, because data is not // ready. @@ -683,7 +683,7 @@ if (Meteor.isClient) { // but inner method runs locally. o.expectCallbacks({ added: 1 }); test.equal(coll.find().count(), 1); - const docId = await coll.findOneAsync()._id; + const docId = (await coll.findOneAsync())._id; test.equal(await coll.findOneAsync(), { _id: docId, a: 1 }); // we get the results @@ -1006,7 +1006,7 @@ if (Meteor.isClient) { const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); - const o = observeCursor(test, coll.find()); + const o = await observeCursor(test, coll.find()); conn.methods({ writeSomething: function() { @@ -1034,7 +1034,7 @@ if (Meteor.isClient) { ); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId = await coll.findOneAsync({ foo: 'bar' })._id; + const stubWrittenId = (await coll.findOneAsync({ foo: 'bar' }))._id; o.expectCallbacks({ added: 1 }); // Callback not called. test.equal(callbackOutput, []); @@ -1124,7 +1124,7 @@ if (Meteor.isClient) { ); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId2 = await coll.findOneAsync({ foo: 'bar' })._id; + const stubWrittenId2 = (await coll.findOneAsync({ foo: 'bar' }))._id; o.expectCallbacks({ added: 1 }); // Callback not called. test.equal(callbackOutput, ['bla']); @@ -1343,7 +1343,7 @@ if (Meteor.isClient) { const collName = Random.id(); const coll = new Mongo.Collection(collName, { connection: conn }); - const o = observeCursor(test, coll.find()); + const o = await observeCursor(test, coll.find()); conn.methods({ insertSomething: function() { @@ -1361,7 +1361,7 @@ if (Meteor.isClient) { conn.call('insertSomething', _.identity); // Stub write is visible. test.equal(coll.find({ foo: 'bar' }).count(), 1); - const stubWrittenId = await coll.findOneAsync({ foo: 'bar' })._id; + const stubWrittenId = (await coll.findOneAsync({ foo: 'bar' }))._id; o.expectCallbacks({ added: 1 }); // Method sent. const insertMethodId = testGotMessage(test, stream, { @@ -2338,7 +2338,7 @@ if (Meteor.isClient) { await stream.receive(subDocMessage); await stream.receive(subReadyMessage); - test.isTrue(await coll.findOneAsync('aaa').value == 111); + test.isTrue((await coll.findOneAsync('aaa')).value == 111); // Initiate reconnect. await stream.reset(); @@ -2347,12 +2347,12 @@ if (Meteor.isClient) { await stream.receive({ msg: 'connected', session: SESSION_ID + 1 }); // Now in reconnect, can still see the document. - test.isTrue(await coll.findOneAsync('aaa').value == 111); + test.isTrue((await coll.findOneAsync('aaa')).value == 111); await conn.callAsync('update_value'); // Observe the stub-written value. - test.isTrue(await coll.findOneAsync('aaa').value == 222); + test.isTrue((await coll.findOneAsync('aaa')).value == 222); let methodMessage = JSON.parse(stream.sent.shift()); test.equal(methodMessage, { @@ -2369,7 +2369,7 @@ if (Meteor.isClient) { // By this point quiescence is reached and stores have been reset. // The stub-written value is still there. - test.isTrue(await coll.findOneAsync('aaa').value == 222); + test.isTrue((await coll.findOneAsync('aaa')).value == 222); await stream.receive({ msg: 'changed', @@ -2381,7 +2381,7 @@ if (Meteor.isClient) { await stream.receive({ msg: 'result', id: methodMessage.id, result: null }); // Server wrote a different value, make sure it's visible now. - test.isTrue(await coll.findOneAsync('aaa').value == 333); + test.isTrue((await coll.findOneAsync('aaa')).value == 333); } ); @@ -2402,7 +2402,7 @@ if (Meteor.isClient) { conn.methods({ update_value: async function() { - const value = await coll.findOneAsync('aaa').subscription; + const value = (await coll.findOneAsync('aaa')).subscription; // Method should have access to the latest value of the collection. coll.update('aaa', { $set: { method: value + 110 } }); } @@ -2430,7 +2430,7 @@ if (Meteor.isClient) { await stream.receive(subDocMessage); await stream.receive(subReadyMessage); - test.equal(await coll.findOneAsync('aaa').subscription, 111); + test.equal((await coll.findOneAsync('aaa')).subscription, 111); const subDocChangeMessage = { msg: 'changed', @@ -2441,16 +2441,16 @@ if (Meteor.isClient) { await stream.receive(subDocChangeMessage); // Still 111 because buffer has not been flushed. - test.equal(await coll.findOneAsync('aaa').subscription, 111); + test.equal((await coll.findOneAsync('aaa')).subscription, 111); // Call updates the stub. await conn.callAsync('update_value'); // Observe the stub-written value. - test.equal(await coll.findOneAsync('aaa').method, 222); + test.equal((await coll.findOneAsync('aaa')).method, 222); // subscription field is updated to the latest value // because of the method call. - test.equal(await coll.findOneAsync('aaa').subscription, 112); + test.equal((await coll.findOneAsync('aaa')).subscription, 112); let methodMessage = JSON.parse(stream.sent.shift()); test.equal(methodMessage, { @@ -2473,14 +2473,14 @@ if (Meteor.isClient) { await stream.receive({ msg: 'updated', methods: [methodMessage.id] }); await stream.receive({ msg: 'result', id: methodMessage.id, result: null }); - test.equal(await coll.findOneAsync('aaa').method, 222); - test.equal(await coll.findOneAsync('aaa').subscription, 112); + test.equal((await coll.findOneAsync('aaa')).method, 222); + test.equal((await coll.findOneAsync('aaa')).subscription, 112); // Buffer should already be flushed because of a non-update message. // And after a flush we really want subscription field to be 112. conn._flushBufferedWrites(); - test.equal(await coll.findOneAsync('aaa').method, 222); - test.equal(await coll.findOneAsync('aaa').subscription, 112); + test.equal((await coll.findOneAsync('aaa')).method, 222); + test.equal((await coll.findOneAsync('aaa')).subscription, 112); }); } diff --git a/packages/ddp-client/test/livedata_test_service.js b/packages/ddp-client/test/livedata_test_service.js index 9f0c7d1fe4..9a3aa7cc6f 100644 --- a/packages/ddp-client/test/livedata_test_service.js +++ b/packages/ddp-client/test/livedata_test_service.js @@ -59,28 +59,29 @@ if (Meteor.isServer) { // other. const waiters = Object.create(null); - const Future = Npm.require('fibers/future'); - const returnThroughFuture = function(token, returnValue) { // Make sure that when we call return, the fields are already cleared. const record = waiters[token]; if (!record) return; delete waiters[token]; - record.future['return'](returnValue); + record.future(returnValue); }; Meteor.methods({ delayedTrue: function(token) { check(token, String); - const record = (waiters[token] = { - future: new Future(), + + let resolver; + const promise = new Promise(res => resolver = res); + waiters[token] = { + future: resolver, timer: Meteor.setTimeout(function() { returnThroughFuture(token, true); }, 1000) - }); + }; this.unblock(); - return record.future.wait(); + return promise; }, makeDelayedTrueImmediatelyReturnFalse: function(token) { check(token, String); diff --git a/packages/ddp-client/test/livedata_tests.js b/packages/ddp-client/test/livedata_tests.js index a5fae51937..951ee11aa0 100644 --- a/packages/ddp-client/test/livedata_tests.js +++ b/packages/ddp-client/test/livedata_tests.js @@ -79,10 +79,10 @@ Tinytest.add('livedata - non-function method', function(test) { }); const echoTest = function(item) { - return function(test, expect) { + return async function(test, expect) { if (Meteor.isServer) { - test.equal(Meteor.call('echo', item), [item]); - test.equal(Meteor.call('echoOne', item), item); + test.equal(await Meteor.callAsync('echo', item), [item]); + test.equal(await Meteor.callAsync('echoOne', item), item); } if (Meteor.isClient) test.equal(Meteor.call('echo', item), undefined); @@ -96,13 +96,13 @@ const echoTest = function(item) { testAsyncMulti('livedata - basic method invocation', [ // Unknown methods - function(test, expect) { + async function(test, expect) { if (Meteor.isServer) { // On server, with no callback, throws exception let ret; let threw; try { - ret = Meteor.call('unknown method'); + ret = await Meteor.callAsync('unknown method'); } catch (e) { test.equal(e.error, 404); threw = true; @@ -125,18 +125,18 @@ testAsyncMulti('livedata - basic method invocation', [ test.equal(ret, undefined); }, - function(test, expect) { + async function(test, expect) { // make sure 'undefined' is preserved as such, instead of turning // into null (JSON does not have 'undefined' so there is special // code for this) - if (Meteor.isServer) test.equal(Meteor.call('nothing'), undefined); + if (Meteor.isServer) test.equal(await Meteor.callAsync('nothing'), undefined); if (Meteor.isClient) test.equal(Meteor.call('nothing'), undefined); test.equal(Meteor.call('nothing', expect(undefined, undefined)), undefined); }, - function(test, expect) { - if (Meteor.isServer) test.equal(Meteor.call('echo'), []); + async function(test, expect) { + if (Meteor.isServer) test.equal(await Meteor.callAsync('echo'), []); if (Meteor.isClient) test.equal(Meteor.call('echo'), undefined); test.equal(Meteor.call('echo', expect(undefined, [])), undefined); @@ -153,9 +153,9 @@ testAsyncMulti('livedata - basic method invocation', [ echoTest(Infinity), echoTest(-Infinity), - function(test, expect) { + async function(test, expect) { if (Meteor.isServer) - test.equal(Meteor.call('echo', 12, { x: 13 }), [12, { x: 13 }]); + test.equal(await Meteor.callAsync('echo', 12, { x: 13 }), [12, { x: 13 }]); if (Meteor.isClient) test.equal(Meteor.call('echo', 12, { x: 13 }), undefined); @@ -198,7 +198,7 @@ testAsyncMulti('livedata - basic method invocation', [ } }, - function(test, expect) { + async function(test, expect) { // No callback if (Meteor.isServer) { @@ -209,7 +209,7 @@ testAsyncMulti('livedata - basic method invocation', [ Meteor.call('exception', 'server'); }); // No exception, because no code will run on the client - test.equal(Meteor.call('exception', 'client'), undefined); + test.equal(await Meteor.callAsync('exception', 'client'), undefined); } if (Meteor.isClient) { @@ -273,15 +273,15 @@ testAsyncMulti('livedata - basic method invocation', [ ), undefined ); - test.equal(Meteor.call('exception', 'client'), undefined); + test.equal(await Meteor.callAsync('exception', 'client'), undefined); } }, - function(test, expect) { + async function(test, expect) { if (Meteor.isServer) { let threw = false; try { - Meteor.call('exception', 'both', { intended: true }); + await Meteor.callAsync('exception', 'both', { intended: true }); } catch (e) { threw = true; test.equal(e.error, 999); @@ -290,7 +290,7 @@ testAsyncMulti('livedata - basic method invocation', [ test.isTrue(threw); threw = false; try { - Meteor.call('exception', 'both', { + await Meteor.callAsync('exception', 'both', { intended: true, throwThroughFuture: true }); From 068e655514244cba0940b549409e45e479f5dc57 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 7 Dec 2022 14:23:18 -0400 Subject: [PATCH 246/292] fixing "livedata - method call on server blocks in a fiber way" test --- packages/ddp-client/test/livedata_tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ddp-client/test/livedata_tests.js b/packages/ddp-client/test/livedata_tests.js index 951ee11aa0..66a835ae8f 100644 --- a/packages/ddp-client/test/livedata_tests.js +++ b/packages/ddp-client/test/livedata_tests.js @@ -992,10 +992,10 @@ if (Meteor.isServer) { ); }, - function(test, expect) { + async function(test, expect) { const self = this; if (self.conn.status().connected) { - test.equal(self.conn.call('s2s', 'foo'), 's2s foo'); + test.equal(await self.conn.callAsync('s2s', 'foo'), 's2s foo'); } } ]); From dc21bbeb2a47493c3bf442d86efb70c935935dc5 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 7 Dec 2022 14:27:34 -0400 Subject: [PATCH 247/292] fixing "livedata - DDP.randomStream" test --- packages/ddp-client/test/random_stream_tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ddp-client/test/random_stream_tests.js b/packages/ddp-client/test/random_stream_tests.js index 03b1ce05ec..b2a44281fe 100644 --- a/packages/ddp-client/test/random_stream_tests.js +++ b/packages/ddp-client/test/random_stream_tests.js @@ -1,8 +1,8 @@ -Tinytest.add('livedata - DDP.randomStream', function(test) { +Tinytest.addAsync('livedata - DDP.randomStream', async function(test) { const randomSeed = Random.id(); const context = { randomSeed: randomSeed }; - let sequence = DDP._CurrentMethodInvocation.withValue(context, function() { + let sequence = await DDP._CurrentMethodInvocation.withValue(context, function() { return DDP.randomStream('1'); }); @@ -21,7 +21,7 @@ Tinytest.add('livedata - DDP.randomStream', function(test) { test.equal(id1, id1Cloned); // We should get the same sequence when we use the same key - sequence = DDP._CurrentMethodInvocation.withValue(context, function() { + sequence = await DDP._CurrentMethodInvocation.withValue(context, function() { return DDP.randomStream('1'); }); seeds = sequence.alea.args; From e89ecdda323a7532fb0e2d3b46ad2682ed9814d6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 21:45:43 -0300 Subject: [PATCH 248/292] tests: removed other tests --- packages/accounts-base/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index b707f589a2..9c89bb5fd5 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -63,5 +63,5 @@ Package.onTest(api => { api.addFiles('accounts_tests_setup.js', 'server'); api.mainModule('server_tests.js', 'server'); - api.mainModule('client_tests.js', 'client'); + // api.mainModule('client_tests.js', 'client'); }); From 2333bc35a3acd208715a59b9fb2390b921db8a4b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 21:45:58 -0300 Subject: [PATCH 249/292] tests: made setup async --- packages/accounts-base/accounts_tests_setup.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/accounts-base/accounts_tests_setup.js b/packages/accounts-base/accounts_tests_setup.js index bd79562fe0..31ed7e2196 100644 --- a/packages/accounts-base/accounts_tests_setup.js +++ b/packages/accounts-base/accounts_tests_setup.js @@ -1,25 +1,25 @@ -const getTokenFromSecret = ({ selector, secret: secretParam }) => { +const getTokenFromSecret = async ({ selector, secret: secretParam }) => { let secret = secretParam; if (!secret) { const { services: { twoFactorAuthentication } = {} } = - Meteor.users.findOne(selector) || {}; + await Meteor.users.findOne(selector) || {}; if (!twoFactorAuthentication) { throw new Meteor.Error(500, 'twoFactorAuthentication not set.'); } secret = twoFactorAuthentication.secret; } - const { token } = Accounts._generate2faToken(secret); + const { token } = Accounts._generate2faToken(secret); return token; }; Meteor.methods({ - removeAccountsTestUser(username) { - Meteor.users.remove({ username }); + async removeAccountsTestUser(username) { + await Meteor.users.remove({ username }); }, - forceEnableUser2fa(selector, secret) { - Meteor.users.update( + async forceEnableUser2fa(selector, secret) { + await Meteor.users.update( selector, { $set: { From ba98f5fe31107652fce5e7eb9bcde5094e41830b Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 21:46:10 -0300 Subject: [PATCH 250/292] test: made all tests async --- packages/accounts-base/accounts_tests.js | 58 ++++++++++++------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 797bd758f0..266c6a0bd0 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -17,14 +17,14 @@ Tinytest.add( test => test.throws(() => Accounts.config({foo: "bar"})) ); -Tinytest.add('accounts - config - token lifetime', test => { +Tinytest.addAsync('accounts - config - token lifetime', async test => { const { loginExpirationInDays } = Accounts._options; Accounts._options.loginExpirationInDays = 2; test.equal(Accounts._getTokenLifetimeMs(), 2 * 24 * 60 * 60 * 1000); Accounts._options.loginExpirationInDays = loginExpirationInDays; }); -Tinytest.add('accounts - config - unexpiring tokens', test => { +Tinytest.addAsync('accounts - config - unexpiring tokens', async test => { const { loginExpirationInDays } = Accounts._options; // When setting loginExpirationInDays to null in the global Accounts @@ -52,7 +52,7 @@ Tinytest.add('accounts - config - unexpiring tokens', test => { Accounts._options.loginExpirationInDays = loginExpirationInDays; }); -Tinytest.add('accounts - config - default token lifetime', test => { +Tinytest.addAsync('accounts - config - default token lifetime', async test => { const options = Accounts._options; Accounts._options = {}; test.equal( @@ -62,7 +62,7 @@ Tinytest.add('accounts - config - default token lifetime', test => { Accounts._options = options; }); -Tinytest.add('accounts - config - defaultFieldSelector', test => { +Tinytest.addAsync('accounts - config - defaultFieldSelector', async test => { const options = Accounts._options; Accounts._options = {}; const setValue = {bigArray: 0}; @@ -77,12 +77,12 @@ Accounts.validateNewUser(user => { return true; }); -Tinytest.add('accounts - validateNewUser gets passed user with _id', test => { - const newUserId = Accounts.updateOrCreateUserFromExternalService('foobook', {id: Random.id()}).userId; - test.isTrue(newUserId in idsInValidateNewUser); +Tinytest.addAsync('accounts - validateNewUser gets passed user with _id', async test => { + const { userId } = await Accounts.updateOrCreateUserFromExternalService('foobook', { id: Random.id() }); + test.isTrue(userId in idsInValidateNewUser); }); -Tinytest.add('accounts - updateOrCreateUserFromExternalService - Facebook', test => { +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', async test => { const facebookId = Random.id(); // create an account with facebook @@ -112,7 +112,7 @@ Tinytest.add('accounts - updateOrCreateUserFromExternalService - Facebook', test Meteor.users.remove(uid1); }); -Tinytest.add('accounts - updateOrCreateUserFromExternalService - Meteor Developer', test => { +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Meteor Developer', async test => { const developerId = Random.id(); const uid1 = Accounts.updateOrCreateUserFromExternalService( 'meteor-developer', @@ -138,7 +138,7 @@ Tinytest.add('accounts - updateOrCreateUserFromExternalService - Meteor Develope Meteor.users.remove(uid1); }); -Tinytest.add('accounts - updateOrCreateUserFromExternalService - Weibo', test => { +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', async test => { const weiboId1 = Random.id(); const weiboId2 = Random.id(); @@ -158,7 +158,7 @@ Tinytest.add('accounts - updateOrCreateUserFromExternalService - Weibo', test => Meteor.users.remove(uid2); }); -Tinytest.add('accounts - updateOrCreateUserFromExternalService - Twitter', test => { +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', async test => { const twitterIdOld = parseInt(Random.hexString(4), 16); const twitterIdNew = ''+twitterIdOld; @@ -184,7 +184,7 @@ Tinytest.add('accounts - updateOrCreateUserFromExternalService - Twitter', test }); -Tinytest.add('accounts - insertUserDoc username', test => { +Tinytest.addAsync('accounts - insertUserDoc username', async test => { const userIn = { username: Random.id() }; @@ -210,7 +210,7 @@ Tinytest.add('accounts - insertUserDoc username', test => { Meteor.users.remove(userId); }); -Tinytest.add('accounts - insertUserDoc email', test => { +Tinytest.addAsync('accounts - insertUserDoc email', async test => { const email1 = Random.id(); const email2 = Random.id(); const email3 = Random.id(); @@ -380,7 +380,7 @@ Tinytest.addAsync( } ); -Tinytest.add('accounts - get new token', test => { +Tinytest.addAsync('accounts - get new token', async test => { // Test that the `getNewToken` method returns us a valid token, with // the same expiration as our original token. const userId = Accounts.insertUserDoc({}, { username: Random.id() }); @@ -441,9 +441,9 @@ Tinytest.addAsync('accounts - remove other tokens', (test, onComplete) => { } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - hook callbacks can access Meteor.userId()', - test => { + async test => { const userId = Accounts.insertUserDoc({}, { username: Random.id() }); const stampedToken = Accounts._generateStampedLoginToken(); Accounts._insertLoginToken(userId, stampedToken); @@ -491,9 +491,9 @@ Tinytest.add( } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - hook callbacks obey options.defaultFieldSelector', - test => { + async test => { const ignoreFieldName = "bigArray"; const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1] }); const stampedToken = Accounts._generateStampedLoginToken(); @@ -548,9 +548,9 @@ Tinytest.add( } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - Meteor.user() obeys options.defaultFieldSelector', - test => { + async test => { const ignoreFieldName = "bigArray"; const customField = "customField"; const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); @@ -607,7 +607,7 @@ Tinytest.add( Tinytest.addAsync( 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', - async test => { + async test => { const ignoreFieldName = "bigArray"; const customField = "customField"; const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); @@ -660,9 +660,9 @@ Tinytest.addAsync( Accounts.userId = origAccountsUserId; } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - verify onExternalLogin hook can update oauth user profiles', - test => { + async test => { // Verify user profile data is saved properly when not using the // onExternalLogin hook. let facebookId = Random.id(); @@ -721,9 +721,9 @@ Tinytest.add( } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - verify beforeExternalLogin hook can stop user login', - test => { + async test => { // Verify user data is saved properly when not using the // beforeExternalLogin hook. let facebookId = Random.id(); @@ -762,9 +762,9 @@ Tinytest.add( } ); -Tinytest.add( +Tinytest.addAsync( 'accounts - verify setAdditionalFindUserOnExternalLogin hook can provide user', - test => { + async test => { // create test user, without a google service const testEmail = "test@testdomain.com" const uid0 = Accounts.createUser({email: testEmail}) @@ -795,9 +795,9 @@ Tinytest.add( ); if(Meteor.isServer) { - Tinytest.add( + Tinytest.addAsync( 'accounts - make sure that extra params to accounts urls are added', - test => { + async test => { // No extra params const verifyEmailURL = new URL(Accounts.urls.verifyEmail('test')); test.equal(verifyEmailURL.searchParams.toString(), ""); From ac1dfe897422d0a2da8426e27353d5f03d8e6970 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 7 Dec 2022 21:46:23 -0300 Subject: [PATCH 251/292] chore: updated test methods --- packages/accounts-base/accounts_server.js | 148 ++++++++++++---------- 1 file changed, 84 insertions(+), 64 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 2ad5a2cb83..f9c4e82bc5 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -918,6 +918,12 @@ export class AccountsServer extends AccountsCommon { ); }; + /** + * + * @param userId + * @private + * @returns {Promise} + */ _clearAllLoginTokens(userId) { this.users.update(userId, { $set: { @@ -1099,7 +1105,14 @@ export class AccountsServer extends AccountsCommon { // tests. oldestValidDate is simulate expiring tokens without waiting // for them to actually expire. userId is used by tests to only expire // tokens for the test user. - _expireTokens(oldestValidDate, userId) { + /** + * + * @param oldestValidDate + * @param userId + * @private + * @return {Promise} + */ + async _expireTokens(oldestValidDate, userId) { const tokenLifetimeMs = this._getTokenLifetimeMs(); // when calling from a test with extra arguments, you must specify both! @@ -1114,7 +1127,7 @@ export class AccountsServer extends AccountsCommon { // Backwards compatible with older versions of meteor that stored login token // timestamps as numbers. - this.users.update({ ...userFilter, + await this.users.update({ ...userFilter, $or: [ { "services.resume.loginTokens.when": { $lt: oldestValidDate } }, { "services.resume.loginTokens.when": { $lt: +oldestValidDate } } @@ -1151,7 +1164,7 @@ export class AccountsServer extends AccountsCommon { }; // Called by accounts-password - insertUserDoc(options, user) { + async insertUserDoc(options, user) { // - clone user document, to protect from modification // - add createdAt timestamp // - prepare an _id, so that you can modify other collections (eg @@ -1196,7 +1209,7 @@ export class AccountsServer extends AccountsCommon { let userId; try { - userId = this.users.insert(fullUser); + userId = await this.users.insert(fullUser); } catch (e) { // XXX string parsing sucks, maybe // https://jira.mongodb.org/browse/SERVER-3069 will get fixed one day @@ -1226,9 +1239,9 @@ export class AccountsServer extends AccountsCommon { /// CLEAN UP FOR `logoutOtherClients` /// - _deleteSavedTokensForUser(userId, tokensToDelete) { + async _deleteSavedTokensForUser(userId, tokensToDelete) { if (tokensToDelete) { - this.users.update(userId, { + await this.users.update(userId, { $unset: { "services.resume.haveLoginTokensToDelete": 1, "services.resume.loginTokensToDelete": 1 @@ -1247,16 +1260,23 @@ export class AccountsServer extends AccountsCommon { // shouldn't happen very often. We shouldn't put a delay here because // that would give a lot of power to an attacker with a stolen login // token and the ability to crash the server. - Meteor.startup(() => { - this.users.find({ + Meteor.startup(async () => { + await this.users.find({ "services.resume.haveLoginTokensToDelete": true - }, {fields: { + }, { + fields: { "services.resume.loginTokensToDelete": 1 - }}).forEach(user => { + } + }).forEach(user => { this._deleteSavedTokensForUser( user._id, user.services.resume.loginTokensToDelete - ); + ) + // We don't need to wait for this to complete. + .then(_ => _) + .catch(err => { + console.log(err); + }); }); }); }; @@ -1276,7 +1296,7 @@ export class AccountsServer extends AccountsCommon { // @returns {Object} Object with token and id keys, like the result // of the "login" method. // - updateOrCreateUserFromExternalService( + async updateOrCreateUserFromExternalService( serviceName, serviceData, options @@ -1311,9 +1331,7 @@ export class AccountsServer extends AccountsCommon { } else { selector[serviceIdKey] = serviceData.id; } - - let user = this.users.findOne(selector, {fields: this._options.defaultFieldSelector}); - + let user = await this.users.findOne(selector, {fields: this._options.defaultFieldSelector}); // Check to see if the developer has a custom way to find the user outside // of the general selectors above. if (!user && this._additionalFindUserOnExternalLogin) { @@ -1337,7 +1355,7 @@ export class AccountsServer extends AccountsCommon { } if (user) { - pinEncryptedFieldsToUser(serviceData, user._id); + await pinEncryptedFieldsToUser(serviceData, user._id); let setAttrs = {}; Object.keys(serviceData).forEach(key => @@ -1347,7 +1365,7 @@ export class AccountsServer extends AccountsCommon { // XXX Maybe we should re-use the selector above and notice if the update // touches nothing? setAttrs = { ...setAttrs, ...opts }; - this.users.update(user._id, { + await this.users.update(user._id, { $set: setAttrs }); @@ -1359,9 +1377,10 @@ export class AccountsServer extends AccountsCommon { // Create a new user with the service data. user = {services: {}}; user.services[serviceName] = serviceData; + const userId = await this.insertUserDoc(opts, user); return { type: serviceName, - userId: this.insertUserDoc(opts, user) + userId }; } }; @@ -1543,7 +1562,7 @@ const setupDefaultLoginHandlers = accounts => { }; // Login handler for resume tokens. -const defaultResumeLoginHandler = (accounts, options) => { +const defaultResumeLoginHandler = async (accounts, options) => { if (!options.resume) return undefined; @@ -1554,7 +1573,7 @@ const defaultResumeLoginHandler = (accounts, options) => { // First look for just the new-style hashed login token, to avoid // sending the unhashed token to the database in a query if we don't // need to. - let user = accounts.users.findOne( + let user = await accounts.users.findOne( {"services.resume.loginTokens.hashedToken": hashedToken}, {fields: {"services.resume.loginTokens.$": 1}}); @@ -1564,7 +1583,7 @@ const defaultResumeLoginHandler = (accounts, options) => { // the old-style token OR the new-style token, because another // client connection logging in simultaneously might have already // converted the token. - user = accounts.users.findOne({ + user = await accounts.users.findOne({ $or: [ {"services.resume.loginTokens.hashedToken": hashedToken}, {"services.resume.loginTokens.token": options.resume} @@ -1583,13 +1602,13 @@ const defaultResumeLoginHandler = (accounts, options) => { // {hashedToken, when} for a hashed token or {token, when} for an // unhashed token. let oldUnhashedStyleToken; - let token = user.services.resume.loginTokens.find(token => + let token = await user.services.resume.loginTokens.find(token => token.hashedToken === hashedToken ); if (token) { oldUnhashedStyleToken = false; } else { - token = user.services.resume.loginTokens.find(token => + token = await user.services.resume.loginTokens.find(token => token.token === options.resume ); oldUnhashedStyleToken = true; @@ -1609,7 +1628,7 @@ const defaultResumeLoginHandler = (accounts, options) => { // after we read it). Using $addToSet avoids getting an index // error if another client logging in simultaneously has already // inserted the new hashed token. - accounts.users.update( + await accounts.users.update( { _id: user._id, "services.resume.loginTokens.token": options.resume @@ -1625,7 +1644,7 @@ const defaultResumeLoginHandler = (accounts, options) => { // Remove the old token *after* adding the new, since otherwise // another client trying to login between our removing the old and // adding the new wouldn't find a token to login with. - accounts.users.update(user._id, { + await accounts.users.update(user._id, { $pull: { "services.resume.loginTokens": { "token": options.resume } } @@ -1641,49 +1660,50 @@ const defaultResumeLoginHandler = (accounts, options) => { }; }; -const expirePasswordToken = ( - accounts, - oldestValidDate, - tokenFilter, - userId -) => { - // boolean value used to determine if this method was called from enroll account workflow - let isEnroll = false; - const userFilter = userId ? {_id: userId} : {}; - // check if this method was called from enroll account workflow - if(tokenFilter['services.password.enroll.reason']) { - isEnroll = true; - } - let resetRangeOr = { - $or: [ - { "services.password.reset.when": { $lt: oldestValidDate } }, - { "services.password.reset.when": { $lt: +oldestValidDate } } - ] - }; - if(isEnroll) { - resetRangeOr = { +const expirePasswordToken = + async ( + accounts, + oldestValidDate, + tokenFilter, + userId + ) => { + // boolean value used to determine if this method was called from enroll account workflow + let isEnroll = false; + const userFilter = userId ? { _id: userId } : {}; + // check if this method was called from enroll account workflow + if (tokenFilter['services.password.enroll.reason']) { + isEnroll = true; + } + let resetRangeOr = { $or: [ - { "services.password.enroll.when": { $lt: oldestValidDate } }, - { "services.password.enroll.when": { $lt: +oldestValidDate } } + { "services.password.reset.when": { $lt: oldestValidDate } }, + { "services.password.reset.when": { $lt: +oldestValidDate } } ] }; - } - const expireFilter = { $and: [tokenFilter, resetRangeOr] }; - if(isEnroll) { - accounts.users.update({...userFilter, ...expireFilter}, { - $unset: { - "services.password.enroll": "" - } - }, { multi: true }); - } else { - accounts.users.update({...userFilter, ...expireFilter}, { - $unset: { - "services.password.reset": "" - } - }, { multi: true }); - } + if (isEnroll) { + resetRangeOr = { + $or: [ + { "services.password.enroll.when": { $lt: oldestValidDate } }, + { "services.password.enroll.when": { $lt: +oldestValidDate } } + ] + }; + } + const expireFilter = { $and: [tokenFilter, resetRangeOr] }; + if (isEnroll) { + await accounts.users.update({ ...userFilter, ...expireFilter }, { + $unset: { + "services.password.enroll": "" + } + }, { multi: true }); + } else { + await accounts.users.update({ ...userFilter, ...expireFilter }, { + $unset: { + "services.password.reset": "" + } + }, { multi: true }); + } -}; + }; const setExpireTokensInterval = accounts => { accounts.expireTokenInterval = Meteor.setInterval(() => { From aae8843a25db7bc6700e1a9dacf6a4efa605482d Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 8 Dec 2022 10:42:27 -0400 Subject: [PATCH 252/292] fixing "livedata - changing userid reruns subscriptions without flapping data on the wire" test --- .../ddp-client/test/livedata_test_service.js | 73 ++++++------- packages/ddp-client/test/livedata_tests.js | 100 ++++++++++-------- 2 files changed, 95 insertions(+), 78 deletions(-) diff --git a/packages/ddp-client/test/livedata_test_service.js b/packages/ddp-client/test/livedata_test_service.js index 9a3aa7cc6f..d278a8932b 100644 --- a/packages/ddp-client/test/livedata_test_service.js +++ b/packages/ddp-client/test/livedata_test_service.js @@ -157,47 +157,48 @@ Meteor.methods({ objectsWithUsers = new Mongo.Collection('objectsWithUsers'); -if (Meteor.isServer) { - objectsWithUsers.remove({}); - objectsWithUsers.insert({ name: 'owned by none', ownerUserIds: [null] }); - objectsWithUsers.insert({ name: 'owned by one - a', ownerUserIds: ['1'] }); - objectsWithUsers.insert({ - name: 'owned by one/two - a', - ownerUserIds: ['1', '2'] - }); - objectsWithUsers.insert({ - name: 'owned by one/two - b', - ownerUserIds: ['1', '2'] - }); - objectsWithUsers.insert({ name: 'owned by two - a', ownerUserIds: ['2'] }); - objectsWithUsers.insert({ name: 'owned by two - b', ownerUserIds: ['2'] }); +Meteor.startup(async function() { + if (Meteor.isServer) { + await objectsWithUsers.removeAsync({}); + await objectsWithUsers.insertAsync({name: 'owned by none', ownerUserIds: [null]}); + await objectsWithUsers.insertAsync({name: 'owned by one - a', ownerUserIds: ['1']}); + await objectsWithUsers.insertAsync({ + name: 'owned by one/two - a', + ownerUserIds: ['1', '2'] + }); + await objectsWithUsers.insertAsync({ + name: 'owned by one/two - b', + ownerUserIds: ['1', '2'] + }); + await objectsWithUsers.insertAsync({name: 'owned by two - a', ownerUserIds: ['2']}); + await objectsWithUsers.insertAsync({name: 'owned by two - b', ownerUserIds: ['2']}); - Meteor.publish('objectsWithUsers', function() { - return objectsWithUsers.find( - { ownerUserIds: this.userId }, - { fields: { ownerUserIds: 0 } } - ); - }); - - (function() { - const userIdWhenStopped = Object.create(null); - Meteor.publish('recordUserIdOnStop', function(key) { - check(key, String); - const self = this; - self.onStop(function() { - userIdWhenStopped[key] = self.userId; - }); + Meteor.publish('objectsWithUsers', function () { + return objectsWithUsers.find( + {ownerUserIds: this.userId}, + {fields: {ownerUserIds: 0}} + ); }); - Meteor.methods({ - userIdWhenStopped: function(key) { + (function () { + const userIdWhenStopped = Object.create(null); + Meteor.publish('recordUserIdOnStop', function (key) { check(key, String); - return userIdWhenStopped[key]; - } - }); - })(); -} + const self = this; + self.onStop(function () { + userIdWhenStopped[key] = self.userId; + }); + }); + Meteor.methods({ + userIdWhenStopped: function (key) { + check(key, String); + return userIdWhenStopped[key]; + } + }); + })(); + } +}); /*****/ /// Helper for "livedata - setUserId fails when called on server" diff --git a/packages/ddp-client/test/livedata_tests.js b/packages/ddp-client/test/livedata_tests.js index 66a835ae8f..2005952141 100644 --- a/packages/ddp-client/test/livedata_tests.js +++ b/packages/ddp-client/test/livedata_tests.js @@ -1,6 +1,8 @@ import { DDP } from '../common/namespace.js'; import { Connection } from '../common/livedata_connection.js'; +const _sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); + // XXX should check error codes const failure = function(test, code, reason) { return function(error, result) { @@ -435,7 +437,7 @@ if (Meteor.isClient) { testAsyncMulti( 'livedata - changing userid reruns subscriptions without flapping data on the wire', [ - function(test, expect) { + async function(test, expect) { const messages = []; const undoEavesdrop = eavesdropOnCollection( Meteor.connection, @@ -484,54 +486,68 @@ if (Meteor.isClient) { let afterSecondSetUserId; let afterThirdSetUserId; - Meteor.subscribe( - 'objectsWithUsers', - expect(function() { - expectMessages(1, 0, ['owned by none']); - Meteor.apply( - 'setUserId', - ['1'], - { wait: true }, - afterFirstSetUserId - ); - }) - ); + const handle = Meteor.subscribe('objectsWithUsers'); - afterFirstSetUserId = expect(function() { - expectMessages(3, 1, [ - 'owned by one - a', - 'owned by one/two - a', - 'owned by one/two - b' - ]); + let control = 0; + // Just make sure the subscription is ready before running the tests + // As everything now runs async, the tests were running before the data fully came in + while (!handle.ready()) { + if (!handle.ready()) { + // Just in case something happens with the subscription, we have this control + if (control++ === 1000) { + throw new Error("Subscribe to objectsWithUsers is taking too long!"); + } + await _sleep(0); + return; + } + expectMessages(1, 0, ['owned by none']); Meteor.apply( 'setUserId', - ['2'], + ['1'], { wait: true }, - afterSecondSetUserId + afterFirstSetUserId ); - }); + afterFirstSetUserId = expect(function() { + expectMessages(3, 1, [ + 'owned by one - a', + 'owned by one/two - a', + 'owned by one/two - b', + ]); + Meteor.apply( + 'setUserId', + ['2'], + { wait: true }, + afterSecondSetUserId + ); + }); - afterSecondSetUserId = expect(function() { - expectMessages(2, 1, [ - 'owned by one/two - a', - 'owned by one/two - b', - 'owned by two - a', - 'owned by two - b' - ]); - Meteor.apply('setUserId', ['2'], { wait: true }, afterThirdSetUserId); - }); + afterSecondSetUserId = expect(function() { + expectMessages(2, 1, [ + 'owned by one/two - a', + 'owned by one/two - b', + 'owned by two - a', + 'owned by two - b', + ]); + Meteor.apply( + 'setUserId', + ['2'], + { wait: true }, + afterThirdSetUserId + ); + }); - afterThirdSetUserId = expect(function() { - // Nothing should have been sent since the results of the - // query are the same ("don't flap data on the wire") - expectMessages(0, 0, [ - 'owned by one/two - a', - 'owned by one/two - b', - 'owned by two - a', - 'owned by two - b' - ]); - undoEavesdrop(); - }); + afterThirdSetUserId = expect(function() { + // Nothing should have been sent since the results of the + // query are the same ("don't flap data on the wire") + expectMessages(0, 0, [ + 'owned by one/two - a', + 'owned by one/two - b', + 'owned by two - a', + 'owned by two - b', + ]); + undoEavesdrop(); + }); + } }, function(test, expect) { const key = Random.id(); From aee880e2bc6c1df871b2cd915b462df24c1466b3 Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 8 Dec 2022 12:47:55 -0400 Subject: [PATCH 253/292] fixing "livedata - compound methods" test --- .../ddp-client/test/livedata_test_service.js | 14 +- packages/ddp-client/test/livedata_tests.js | 249 ++++++++++-------- 2 files changed, 150 insertions(+), 113 deletions(-) diff --git a/packages/ddp-client/test/livedata_test_service.js b/packages/ddp-client/test/livedata_test_service.js index d278a8932b..8938a1a8ca 100644 --- a/packages/ddp-client/test/livedata_test_service.js +++ b/packages/ddp-client/test/livedata_test_service.js @@ -109,8 +109,8 @@ Ledger.allow({ fetch: [] }); -Meteor.startup(function() { - if (Meteor.isServer) Ledger.remove({}); // XXX can this please be Ledger.remove()? +Meteor.startup(async function() { + if (Meteor.isServer) await Ledger.removeAsync({}); }); if (Meteor.isServer) @@ -120,14 +120,14 @@ if (Meteor.isServer) }); Meteor.methods({ - 'ledger/transfer': function(world, from_name, to_name, amount, cheat) { + 'ledger/transfer': async function(world, from_name, to_name, amount, cheat) { check(world, String); check(from_name, String); check(to_name, String); check(amount, Number); check(cheat, Match.Optional(Boolean)); - const from = Ledger.findOne({ name: from_name, world: world }); - const to = Ledger.findOne({ name: to_name, world: world }); + const from = await Ledger.findOneAsync({ name: from_name, world: world }); + const to = await Ledger.findOneAsync({ name: to_name, world: world }); if (Meteor.isServer) cheat = false; @@ -146,8 +146,8 @@ Meteor.methods({ if (from.balance < amount && !cheat) throw new Meteor.Error(409, 'Insufficient funds'); - Ledger.update(from._id, { $inc: { balance: -amount } }); - Ledger.update(to._id, { $inc: { balance: amount } }); + await Ledger.updateAsync({_id: from._id}, { $inc: { balance: -amount } }); + await Ledger.updateAsync({_id: to._id, }, { $inc: { balance: amount } }); } }); diff --git a/packages/ddp-client/test/livedata_tests.js b/packages/ddp-client/test/livedata_tests.js index 2005952141..3c181410eb 100644 --- a/packages/ddp-client/test/livedata_tests.js +++ b/packages/ddp-client/test/livedata_tests.js @@ -1,7 +1,23 @@ import { DDP } from '../common/namespace.js'; import { Connection } from '../common/livedata_connection.js'; -const _sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); +const _sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +const callWhenSubReady = async (subName, handle, cb = () => {}) => { + let control = 0; + + while (!handle.ready()) { + if (!handle.ready()) { + // Just in case something happens with the subscription, we have this control + if (control++ === 1000) { + throw new Error(`Subscribe to ${subName} is taking too long!`); + } + await _sleep(0); + return; + } + await cb(); + } +}; // XXX should check error codes const failure = function(test, code, reason) { @@ -131,7 +147,8 @@ testAsyncMulti('livedata - basic method invocation', [ // make sure 'undefined' is preserved as such, instead of turning // into null (JSON does not have 'undefined' so there is special // code for this) - if (Meteor.isServer) test.equal(await Meteor.callAsync('nothing'), undefined); + if (Meteor.isServer) + test.equal(await Meteor.callAsync('nothing'), undefined); if (Meteor.isClient) test.equal(Meteor.call('nothing'), undefined); test.equal(Meteor.call('nothing', expect(undefined, undefined)), undefined); @@ -157,7 +174,10 @@ testAsyncMulti('livedata - basic method invocation', [ async function(test, expect) { if (Meteor.isServer) - test.equal(await Meteor.callAsync('echo', 12, { x: 13 }), [12, { x: 13 }]); + test.equal(await Meteor.callAsync('echo', 12, { x: 13 }), [ + 12, + { x: 13 }, + ]); if (Meteor.isClient) test.equal(Meteor.call('echo', 12, { x: 13 }), undefined); @@ -294,7 +314,7 @@ testAsyncMulti('livedata - basic method invocation', [ try { await Meteor.callAsync('exception', 'both', { intended: true, - throwThroughFuture: true + throwThroughFuture: true, }); } catch (e) { threw = true; @@ -329,74 +349,81 @@ testAsyncMulti('livedata - basic method invocation', [ 'server', { intended: true, - throwThroughFuture: true + throwThroughFuture: true, }, expect(failure(test, 999, 'Client-visible test exception')) ), undefined ); } - } + }, ]); -const checkBalances = function(test, a, b) { - const alice = Ledger.findOne({ name: 'alice', world: test.runId() }); - const bob = Ledger.findOne({ name: 'bob', world: test.runId() }); +const checkBalances = async function(test, a, b) { + const alice = await Ledger.findOneAsync({ + name: 'alice', + world: test.runId(), + }); + const bob = await Ledger.findOneAsync({ name: 'bob', world: test.runId() }); + test.equal(alice.balance, a); test.equal(bob.balance, b); }; +const subscribeBeforeRun = async (subName, testId, cb) => { + if (Meteor.isClient) { + const handle = Meteor.subscribe(subName, testId); + await callWhenSubReady(subName, handle); + handle.stop(); + } + await cb(); +}; + // would be nice to have a database-aware test harness of some kind -- // this is a big hack (and XXX pollutes the global test namespace) testAsyncMulti('livedata - compound methods', [ - function(test, expect) { - if (Meteor.isClient) Meteor.subscribe('ledger', test.runId(), expect()); - - Ledger.insert( - { name: 'alice', balance: 100, world: test.runId() }, - expect(function() {}) - ); - Ledger.insert( - { name: 'bob', balance: 50, world: test.runId() }, - expect(function() {}) - ); + async function(test) { + await Ledger.insertAsync({ + name: 'alice', + balance: 100, + world: test.runId(), + }); + await Ledger.insertAsync({ name: 'bob', balance: 50, world: test.runId() }); }, - function(test, expect) { - Meteor.call( - 'ledger/transfer', - test.runId(), - 'alice', - 'bob', - 10, - expect(function(err, result) { - test.equal(err, undefined); - test.equal(result, undefined); - checkBalances(test, 90, 60); - }) - ); - checkBalances(test, 90, 60); + async function(test) { + await subscribeBeforeRun('ledger', test.runId(), async () => { + await Meteor.callAsync( + 'ledger/transfer', + test.runId(), + 'alice', + 'bob', + 10 + ); + await checkBalances(test, 90, 60); + }); }, - function(test, expect) { - Meteor.call( - 'ledger/transfer', - test.runId(), - 'alice', - 'bob', - 100, - true, - expect(function(err, result) { - failure(test, 409)(err, result); - // Balances are reverted back to pre-stub values. - checkBalances(test, 90, 60); - }) - ); + async function(test) { + await subscribeBeforeRun('ledger', test.runId(), async () => { + try { + await Meteor.callAsync( + 'ledger/transfer', + test.runId(), + 'alice', + 'bob', + 100, + true + ); + } catch (e) {} - if (Meteor.isClient) - // client can fool itself by cheating, but only until the sync - // finishes - checkBalances(test, -10, 160); - else checkBalances(test, 90, 60); - } + if (Meteor.isClient) { + // client can fool itself by cheating, but only until the sync + // finishes + await checkBalances(test, -10, 160); + } else { + await checkBalances(test, 90, 60); + } + }); + }, ]); // Replaces the Connection's `_livedata_data` method to push incoming @@ -488,25 +515,11 @@ if (Meteor.isClient) { const handle = Meteor.subscribe('objectsWithUsers'); - let control = 0; // Just make sure the subscription is ready before running the tests // As everything now runs async, the tests were running before the data fully came in - while (!handle.ready()) { - if (!handle.ready()) { - // Just in case something happens with the subscription, we have this control - if (control++ === 1000) { - throw new Error("Subscribe to objectsWithUsers is taking too long!"); - } - await _sleep(0); - return; - } + await callWhenSubReady('objectsWithUsers', handle, () => { expectMessages(1, 0, ['owned by none']); - Meteor.apply( - 'setUserId', - ['1'], - { wait: true }, - afterFirstSetUserId - ); + Meteor.apply('setUserId', ['1'], { wait: true }, afterFirstSetUserId); afterFirstSetUserId = expect(function() { expectMessages(3, 1, [ 'owned by one - a', @@ -547,7 +560,7 @@ if (Meteor.isClient) { ]); undoEavesdrop(); }); - } + }); }, function(test, expect) { const key = Random.id(); @@ -579,7 +592,7 @@ if (Meteor.isClient) { { wait: true }, expect(function() {}) ); - } + }, ] ); } @@ -630,7 +643,7 @@ Meteor.methods({ return 2; } return 0; - } + }, }); if (Meteor.isClient) { @@ -639,12 +652,22 @@ if (Meteor.isClient) { const id = Random.id(); testAsyncMulti('livedata - added from two different subs', [ function(test, expect) { - Meteor.call('livedata/setup', id, expect(function() {})); + Meteor.call( + 'livedata/setup', + id, + expect(function() {}) + ); }, function(test, expect) { MultiPub = new Mongo.Collection('MultiPubCollection' + id); - const sub1 = Meteor.subscribe('pub1' + id, expect(function() {})); - const sub2 = Meteor.subscribe('pub2' + id, expect(function() {})); + const sub1 = Meteor.subscribe( + 'pub1' + id, + expect(function() {}) + ); + const sub2 = Meteor.subscribe( + 'pub2' + id, + expect(function() {}) + ); }, function(test, expect) { Meteor.call( @@ -669,7 +692,7 @@ if (Meteor.isClient) { }, function(test, expect) { test.equal(MultiPub.findOne('foo'), { _id: 'foo', a: 'aa', b: 'bb' }); - } + }, ]); })(); } @@ -688,7 +711,7 @@ if (Meteor.isClient) { test.isTrue(coll.findOne(token)); }) ); - } + }, ]); testAsyncMulti('livedata - runtime universal sub creation', [ @@ -704,7 +727,7 @@ if (Meteor.isClient) { test.isTrue(coll.findOne(token)); }) ); - } + }, ]); testAsyncMulti('livedata - no setUserId after unblock', [ @@ -716,7 +739,7 @@ if (Meteor.isClient) { test.isTrue(result); }) ); - } + }, ]); testAsyncMulti( @@ -730,7 +753,7 @@ if (Meteor.isClient) { // Use a separate connection so that we can safely check to see if // conn._subscriptions is empty. conn = new Connection('/', { - reloadWithOutstanding: true + reloadWithOutstanding: true, }); collName = Random.id(); coll = new Mongo.Collection(collName, { connection: conn }); @@ -746,7 +769,7 @@ if (Meteor.isClient) { ? 'Internal server error' : 'Explicit error' ) - ) + ), }); }; testSubError({ throwInHandler: true }); @@ -768,7 +791,7 @@ if (Meteor.isClient) { onReady: expect(), onError: function(error) { errorFromRerun = error; - } + }, } ); }, @@ -777,7 +800,11 @@ if (Meteor.isClient) { test.equal(coll.find().count(), 1); test.isFalse(errorFromRerun); test.equal(_.size(conn._subscriptions), 1); // white-box test - conn.call('setUserId', 'bla', expect(function() {})); + conn.call( + 'setUserId', + 'bla', + expect(function() {}) + ); }, function(test, expect) { // Now that we've re-run, we should have stopped the subscription, @@ -796,13 +823,16 @@ if (Meteor.isClient) { { onError: function() { gotErrorFromStopper = true; - } + }, } ); // Call a method. This method won't be processed until the publisher's // function returns, so blocking on it being done ensures that we've // gotten the removed/nosub/etc. - conn.call('nothing', expect(function() {})); + conn.call( + 'nothing', + expect(function() {}) + ); }, function(test, expect) { test.equal(coll.find().count(), 0); @@ -810,7 +840,7 @@ if (Meteor.isClient) { test.isFalse(gotErrorFromStopper); test.equal(_.size(conn._subscriptions), 0); // white-box test conn._stream.disconnect({ _permanent: true }); - } + }, ]; })() ); @@ -826,7 +856,7 @@ if (Meteor.isClient) { // Use a separate connection so that we can safely check to see if // conn._subscriptions is empty. conn = new Connection('/', { - reloadWithOutstanding: true + reloadWithOutstanding: true, }); collName = Random.id(); coll = new Mongo.Collection(collName, { connection: conn }); @@ -842,7 +872,7 @@ if (Meteor.isClient) { ? 'Internal server error' : 'Explicit error' ) - ) + ), }); }; testSubError({ throwInHandler: true }); @@ -864,7 +894,7 @@ if (Meteor.isClient) { onReady: expect(), onStop: function(error) { errorFromRerun = error; - } + }, } ); }, @@ -873,7 +903,11 @@ if (Meteor.isClient) { test.equal(coll.find().count(), 1); test.isFalse(errorFromRerun); test.equal(_.size(conn._subscriptions), 1); // white-box test - conn.call('setUserId', 'bla', expect(function() {})); + conn.call( + 'setUserId', + 'bla', + expect(function() {}) + ); }, function(test, expect) { // Now that we've re-run, we should have stopped the subscription, @@ -894,13 +928,16 @@ if (Meteor.isClient) { if (error) { gotErrorFromStopper = true; } - } + }, } ); // Call a method. This method won't be processed until the publisher's // function returns, so blocking on it being done ensures that we've // gotten the removed/nosub/etc. - conn.call('nothing', expect(function() {})); + conn.call( + 'nothing', + expect(function() {}) + ); }, function(test, expect) { test.equal(coll.find().count(), 0); @@ -908,7 +945,7 @@ if (Meteor.isClient) { test.isFalse(gotErrorFromStopper); test.equal(_.size(conn._subscriptions), 0); // white-box test conn._stream.disconnect({ _permanent: true }); - } + }, ]; })() ); @@ -924,7 +961,7 @@ if (Meteor.isClient) { test.equal(One.find().count(), 2); test.equal(Two.find().count(), 3); }), - onError: failure() + onError: failure(), } ); }, @@ -934,7 +971,7 @@ if (Meteor.isClient) { { dup: 1 }, { onReady: failure(), - onError: expect(failure(test, 500, 'Internal server error')) + onError: expect(failure(test, 500, 'Internal server error')), } ); }, @@ -944,10 +981,10 @@ if (Meteor.isClient) { { notCursor: 1 }, { onReady: failure(), - onError: expect(failure(test, 500, 'Internal server error')) + onError: expect(failure(test, 500, 'Internal server error')), } ); - } + }, ]); } @@ -960,7 +997,7 @@ if (Meteor.isServer) { s2s: function(arg) { check(arg, String); return 's2s ' + arg; - } + }, }); } (function() { @@ -989,7 +1026,7 @@ if (Meteor.isServer) { }) ); } - } + }, ]); })(); @@ -1013,7 +1050,7 @@ if (Meteor.isServer) { if (self.conn.status().connected) { test.equal(await self.conn.callAsync('s2s', 'foo'), 's2s foo'); } - } + }, ]); })(); } @@ -1030,7 +1067,7 @@ if (Meteor.isServer) { }), 500 ); - } + }, ]); })(); @@ -1054,13 +1091,13 @@ if (Meteor.isServer) { onReady: expect(function() { test.equal(PublisherCloningCollection.findOne(), { _id: 'a', - x: { y: 43 } + x: { y: 43 }, }); }), - onError: failure() + onError: failure(), } ); - } + }, ]); } @@ -1099,7 +1136,7 @@ testAsyncMulti('livedata - result by value', [ test.equal(self.firstResult.length + 1, secondResult.length); }) ); - } + }, ]); // XXX some things to test in greater detail: From fa878234ad306b93a79af10b27962bcda5d2faed Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 8 Dec 2022 13:02:53 -0400 Subject: [PATCH 254/292] fixing "publish multiple cursors" test --- .../ddp-client/test/livedata_test_service.js | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/packages/ddp-client/test/livedata_test_service.js b/packages/ddp-client/test/livedata_test_service.js index 8938a1a8ca..57c47b1e8d 100644 --- a/packages/ddp-client/test/livedata_test_service.js +++ b/packages/ddp-client/test/livedata_test_service.js @@ -333,36 +333,38 @@ if (Meteor.isServer) { One = new Mongo.Collection('collectionOne'); Two = new Mongo.Collection('collectionTwo'); -if (Meteor.isServer) { - One.remove({}); - One.insert({ name: 'value1' }); - One.insert({ name: 'value2' }); +Meteor.startup(async () => { + if (Meteor.isServer) { + await One.removeAsync({}); + await One.insertAsync({ name: 'value1' }); + await One.insertAsync({ name: 'value2' }); - Two.remove({}); - Two.insert({ name: 'value3' }); - Two.insert({ name: 'value4' }); - Two.insert({ name: 'value5' }); + await Two.removeAsync({}); + await Two.insertAsync({ name: 'value3' }); + await Two.insertAsync({ name: 'value4' }); + await Two.insertAsync({ name: 'value5' }); - Meteor.publish('multiPublish', function(options) { - // See below to see what options are accepted. - check(options, Object); - if (options.normal) { - return [One.find(), Two.find()]; - } else if (options.dup) { - // Suppress the log of the expected internal error. - Meteor._suppress_log(1); - return [ - One.find(), - One.find({ name: 'value2' }), // multiple cursors for one collection - error - Two.find() - ]; - } else if (options.notCursor) { - // Suppress the log of the expected internal error. - Meteor._suppress_log(1); - return [One.find(), 'not a cursor', Two.find()]; - } else throw 'unexpected options'; - }); -} + Meteor.publish('multiPublish', function(options) { + // See below to see what options are accepted. + check(options, Object); + if (options.normal) { + return [One.find(), Two.find()]; + } else if (options.dup) { + // Suppress the log of the expected internal error. + Meteor._suppress_log(1); + return [ + One.find(), + One.find({ name: 'value2' }), // multiple cursors for one collection - error + Two.find(), + ]; + } else if (options.notCursor) { + // Suppress the log of the expected internal error. + Meteor._suppress_log(1); + return [One.find(), 'not a cursor', Two.find()]; + } else throw 'unexpected options'; + }); + } +}); /// Helper for "livedata - result by value" const resultByValueArrays = Object.create(null); From 919de73cd61c3c1d926c9ab8398746ed1f07f945 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 14:34:15 -0300 Subject: [PATCH 255/292] tests: solved insertUserDoc username --- packages/accounts-base/accounts_tests.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 266c6a0bd0..94e283e6ef 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -190,19 +190,18 @@ Tinytest.addAsync('accounts - insertUserDoc username', async test => { }; // user does not already exist. create a user object with fields set. - const userId = Accounts.insertUserDoc( + const userId = await Accounts.insertUserDoc( {profile: {name: 'Foo Bar'}}, userIn ); - const userOut = Meteor.users.findOne(userId); - + const userOut = await Meteor.users.findOne(userId); test.equal(typeof userOut.createdAt, 'object'); test.equal(userOut.profile.name, 'Foo Bar'); test.equal(userOut.username, userIn.username); // run the hook again. now the user exists, so it throws an error. - test.throws( - () => Accounts.insertUserDoc({profile: {name: 'Foo Bar'}}, userIn), + await test.throwsAsync( + async () => await Accounts.insertUserDoc({profile: {name: 'Foo Bar'}}, userIn), 'Username already exists.' ); From 3492786085d3d20180c8444ccc4c7083221af402 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 14:37:07 -0300 Subject: [PATCH 256/292] tests: solved insertUserDoc email --- packages/accounts-base/accounts_tests.js | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 94e283e6ef..1bc9fb5c3c 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -180,7 +180,7 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', test.length(users2, 1); // cleanup - Meteor.users.remove(uid1); + await Meteor.users.remove(uid1); }); @@ -206,7 +206,7 @@ Tinytest.addAsync('accounts - insertUserDoc username', async test => { ); // cleanup - Meteor.users.remove(userId); + await Meteor.users.remove(userId); }); Tinytest.addAsync('accounts - insertUserDoc email', async test => { @@ -219,11 +219,11 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { }; // user does not already exist. create a user object with fields set. - const userId = Accounts.insertUserDoc( + const userId = await Accounts.insertUserDoc( {profile: {name: 'Foo Bar'}}, userIn ); - const userOut = Meteor.users.findOne(userId); + const userOut = await Meteor.users.findOne(userId); test.equal(typeof userOut.createdAt, 'object'); test.equal(userOut.profile.name, 'Foo Bar'); @@ -231,33 +231,35 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { // run the hook again with the exact same emails. // run the hook again. now the user exists, so it throws an error. - test.throws( - () => Accounts.insertUserDoc({profile: {name: 'Foo Bar'}}, userIn), + await test.throwsAsync( + async () => await Accounts.insertUserDoc({ profile: { name: 'Foo Bar' } }, userIn), 'Email already exists.' ); // now with only one of them. - test.throws(() => - Accounts.insertUserDoc({}, {emails: [{address: email1}]}), + await test.throwsAsync( + async () => + await Accounts.insertUserDoc({}, { emails: [{ address: email1 }] }), 'Email already exists.' ); - test.throws(() => - Accounts.insertUserDoc({}, {emails: [{address: email2}]}), + await test.throwsAsync( + async () => + await Accounts.insertUserDoc({}, { emails: [{ address: email2 }] }), 'Email already exists.' ); // a third email works. - const userId3 = Accounts.insertUserDoc( + const userId3 = await Accounts.insertUserDoc( {}, {emails: [{address: email3}]} ); - const user3 = Meteor.users.findOne(userId3); + const user3 = await Meteor.users.findOne(userId3); test.equal(typeof user3.createdAt, 'object'); // cleanup - Meteor.users.remove(userId); - Meteor.users.remove(userId3); + await Meteor.users.remove(userId); + await Meteor.users.remove(userId3); }); // More token expiration tests are in accounts-password From 02fc0f0531004f8ff0253530c251a280d1717bb2 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 14:44:00 -0300 Subject: [PATCH 257/292] tests: solved expire numeric token --- packages/accounts-base/accounts_tests.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 1bc9fb5c3c..e35a79210d 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -263,13 +263,13 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { }); // More token expiration tests are in accounts-password -Tinytest.addAsync('accounts - expire numeric token', (test, onComplete) => { +Tinytest.addAsync('accounts - expire numeric token', async (test, onComplete) => { const userIn = { username: Random.id() }; - const userId = Accounts.insertUserDoc({ profile: { + const userId = await Accounts.insertUserDoc({ profile: { name: 'Foo Bar' } }, userIn); const date = new Date(new Date() - 5000); - Meteor.users.update(userId, { + await Meteor.users.update(userId, { $set: { "services.resume.loginTokens": [{ hashedToken: Random.id(), @@ -280,7 +280,7 @@ Tinytest.addAsync('accounts - expire numeric token', (test, onComplete) => { }] } }); - const observe = Meteor.users.find(userId).observe({ + const observe = await Meteor.users.find(userId).observe({ changed: newUser => { if (newUser.services && newUser.services.resume && (!newUser.services.resume.loginTokens || @@ -290,7 +290,7 @@ Tinytest.addAsync('accounts - expire numeric token', (test, onComplete) => { } } }); - Accounts._expireTokens(new Date(), userId); + await Accounts._expireTokens(new Date(), userId); }); From 61aab831da26d9ced3e831b819253d1c0969b46c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 14:54:15 -0300 Subject: [PATCH 258/292] chore: asyncfied _insertHashedLoginToken --- packages/accounts-base/accounts_server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index f9c4e82bc5..006cfe8ce8 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -899,10 +899,10 @@ export class AccountsServer extends AccountsCommon { // Using $addToSet avoids getting an index error if another client // logging in simultaneously has already inserted the new hashed // token. - _insertHashedLoginToken(userId, hashedToken, query) { + async _insertHashedLoginToken(userId, hashedToken, query) { query = query ? { ...query } : {}; query._id = userId; - this.users.update(query, { + await this.users.update(query, { $addToSet: { "services.resume.loginTokens": hashedToken } @@ -910,8 +910,8 @@ export class AccountsServer extends AccountsCommon { }; // Exported for tests. - _insertLoginToken(userId, stampedToken, query) { - this._insertHashedLoginToken( + async _insertLoginToken(userId, stampedToken, query) { + await this._insertHashedLoginToken( userId, this._hashStampedToken(stampedToken), query From b1b7b6b6f951375fd6f05e4aea4a743fb26ad53d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 14:54:26 -0300 Subject: [PATCH 259/292] tests: resolved login token --- packages/accounts-base/accounts_tests.js | 48 +++++++++++++----------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index e35a79210d..f0a8c6bf5d 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -296,43 +296,48 @@ Tinytest.addAsync('accounts - expire numeric token', async (test, onComplete) => // Login tokens used to be stored unhashed in the database. We want // to make sure users can still login after upgrading. -const insertUnhashedLoginToken = (userId, stampedToken) => { - Meteor.users.update( +const insertUnhashedLoginToken = async (userId, stampedToken) => { + await Meteor.users.update( userId, {$push: {'services.resume.loginTokens': stampedToken}} ); }; -Tinytest.addAsync('accounts - login token', (test, onComplete) => { +Tinytest.addAsync('accounts - login token', async (test) => { // Test that we can login when the database contains a leftover // old style unhashed login token. - const userId1 = Accounts.insertUserDoc({}, {username: Random.id()}); + const userId1 = + await Accounts.insertUserDoc({}, { username: Random.id() }); const stampedToken1 = Accounts._generateStampedLoginToken(); - insertUnhashedLoginToken(userId1, stampedToken1); + await insertUnhashedLoginToken(userId1, stampedToken1); let connection = DDP.connect(Meteor.absoluteUrl()); - connection.call('login', {resume: stampedToken1.token}); + await connection.callAsync('login', { resume: stampedToken1.token }); connection.disconnect(); // Steal the unhashed token from the database and use it to login. // This is a sanity check so that when we *can't* login with a // stolen *hashed* token, we know it's not a problem with the test. - const userId2 = Accounts.insertUserDoc({}, {username: Random.id()}); - insertUnhashedLoginToken(userId2, Accounts._generateStampedLoginToken()); - const stolenToken1 = Meteor.users.findOne(userId2).services.resume.loginTokens[0].token; + const userId2 = + await Accounts.insertUserDoc({}, { username: Random.id() }); + await insertUnhashedLoginToken(userId2, Accounts._generateStampedLoginToken()); + const user2 = await Meteor.users.findOne(userId2); + const stolenToken1 = user2.services.resume.loginTokens[0].token; test.isTrue(stolenToken1); connection = DDP.connect(Meteor.absoluteUrl()); - connection.call('login', {resume: stolenToken1}); + await connection.callAsync('login', { resume: stolenToken1 }); connection.disconnect(); // Now do the same thing, this time with a stolen hashed token. - const userId3 = Accounts.insertUserDoc({}, {username: Random.id()}); - Accounts._insertLoginToken(userId3, Accounts._generateStampedLoginToken()); - const stolenToken2 = Meteor.users.findOne(userId3).services.resume.loginTokens[0].hashedToken; + const userId3 = + await Accounts.insertUserDoc({}, { username: Random.id() }); + await Accounts._insertLoginToken(userId3, Accounts._generateStampedLoginToken()); + const user3 = await Meteor.users.findOne(userId3); + const stolenToken2 = user3.services.resume.loginTokens[0].hashedToken; test.isTrue(stolenToken2); connection = DDP.connect(Meteor.absoluteUrl()); // evil plan foiled - test.throws( - () => connection.call('login', {resume: stolenToken2}), + await test.throwsAsync( + async () => await connection.callAsync('login', { resume: stolenToken2 }), /You\'ve been logged out by the server/ ); connection.disconnect(); @@ -340,24 +345,25 @@ Tinytest.addAsync('accounts - login token', (test, onComplete) => { // Old style unhashed tokens are replaced by hashed tokens when // encountered. This means that after someone logins once, the // old unhashed token is no longer available to be stolen. - const userId4 = Accounts.insertUserDoc({}, {username: Random.id()}); + const userId4 = + await Accounts.insertUserDoc({}, { username: Random.id() }); const stampedToken2 = Accounts._generateStampedLoginToken(); - insertUnhashedLoginToken(userId4, stampedToken2); + await insertUnhashedLoginToken(userId4, stampedToken2); connection = DDP.connect(Meteor.absoluteUrl()); - connection.call('login', {resume: stampedToken2.token}); + await connection.callAsync('login', { resume: stampedToken2.token }); connection.disconnect(); // The token is no longer available to be stolen. - const stolenToken3 = Meteor.users.findOne(userId4).services.resume.loginTokens[0].token; + const user4 = await Meteor.users.findOne(userId4); + const stolenToken3 = user4.services.resume.loginTokens[0].token; test.isFalse(stolenToken3); // After the upgrade, the client can still login with their original // unhashed login token. connection = DDP.connect(Meteor.absoluteUrl()); - connection.call('login', {resume: stampedToken2.token}); + await connection.callAsync('login', { resume: stampedToken2.token }); connection.disconnect(); - onComplete(); }); Tinytest.addAsync( From 4a15dc2ab973cc6d741a9cb94364a9d396c4d5b1 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:14:56 -0300 Subject: [PATCH 260/292] tests: solved remove other tokens --- packages/accounts-base/accounts_tests.js | 46 +++++++++++++----------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index f0a8c6bf5d..2665935f21 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -4,8 +4,8 @@ import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; Meteor.methods({ - getCurrentLoginToken: function () { - return Accounts._getLoginToken(this.connection.id); + getCurrentLoginToken: async function () { + return await Accounts._getLoginToken(this.connection.id); } }); @@ -390,56 +390,60 @@ Tinytest.addAsync( Tinytest.addAsync('accounts - get new token', async test => { // Test that the `getNewToken` method returns us a valid token, with // the same expiration as our original token. - const userId = Accounts.insertUserDoc({}, { username: Random.id() }); + const userId = await Accounts.insertUserDoc({}, { username: Random.id() }); const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); + await Accounts._insertLoginToken(userId, stampedToken); const conn = DDP.connect(Meteor.absoluteUrl()); - conn.call('login', { resume: stampedToken.token }); - test.equal(conn.call('getCurrentLoginToken'), - Accounts._hashLoginToken(stampedToken.token)); + await conn.callAsync('login', { resume: stampedToken.token }); + test.equal(await conn.callAsync('getCurrentLoginToken'), + Accounts._hashLoginToken(stampedToken.token)); - const newTokenResult = conn.call('getNewToken'); + const newTokenResult = await conn.callAsync('getNewToken'); test.equal(newTokenResult.tokenExpires, - Accounts._tokenExpiration(stampedToken.when)); - test.equal(conn.call('getCurrentLoginToken'), - Accounts._hashLoginToken(newTokenResult.token)); + Accounts._tokenExpiration(stampedToken.when)); + const token = await conn.callAsync('getCurrentLoginToken'); + console.log(token); + test.equal(await conn.callAsync('getCurrentLoginToken'), + Accounts._hashLoginToken(newTokenResult.token)); conn.disconnect(); // A second connection should be able to log in with the new token // we got. const secondConn = DDP.connect(Meteor.absoluteUrl()); - secondConn.call('login', { resume: newTokenResult.token }); + await secondConn.callAsync('login', { resume: newTokenResult.token }); secondConn.disconnect(); } ); -Tinytest.addAsync('accounts - remove other tokens', (test, onComplete) => { +Tinytest.addAsync('accounts - remove other tokens', async (test) => { // Test that the `removeOtherTokens` method removes all tokens other // than the caller's token, thereby logging out and closing other // connections. - const userId = Accounts.insertUserDoc({}, { username: Random.id() }); + const userId = await Accounts.insertUserDoc({}, { username: Random.id() }); const stampedTokens = []; const conns = []; for(let i = 0; i < 2; i++) { stampedTokens.push(Accounts._generateStampedLoginToken()); - Accounts._insertLoginToken(userId, stampedTokens[i]); + await Accounts._insertLoginToken(userId, stampedTokens[i]); const conn = DDP.connect(Meteor.absoluteUrl()); - conn.call('login', { resume: stampedTokens[i].token }); - test.equal(conn.call('getCurrentLoginToken'), + await conn.callAsync('login', { resume: stampedTokens[i].token }); + test.equal(await conn.callAsync('getCurrentLoginToken'), Accounts._hashLoginToken(stampedTokens[i].token)); conns.push(conn); }; - conns[0].call('removeOtherTokens'); - simplePoll(() => { - const tokens = conns.map(conn => conn.call('getCurrentLoginToken')); + await conns[0].callAsync('removeOtherTokens'); + simplePoll(async () => { + let tokens = []; + for (const conn of conns) { + tokens.push(await conn.callAsync('getCurrentLoginToken')); + } return ! tokens[1] && tokens[0] === Accounts._hashLoginToken(stampedTokens[0].token); }, () => { // success conns.forEach(conn => conn.disconnect()); - onComplete(); }, () => { // timed out throw new Error("accounts - remove other tokens timed out"); From 1c60eca86238bae685e8f18e42373712c4966794 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:17:32 -0300 Subject: [PATCH 261/292] tests: solved get new token and removed log --- packages/accounts-base/accounts_tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 2665935f21..27b8f8d160 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -402,7 +402,6 @@ Tinytest.addAsync('accounts - get new token', async test => { test.equal(newTokenResult.tokenExpires, Accounts._tokenExpiration(stampedToken.when)); const token = await conn.callAsync('getCurrentLoginToken'); - console.log(token); test.equal(await conn.callAsync('getCurrentLoginToken'), Accounts._hashLoginToken(newTokenResult.token)); conn.disconnect(); From 704dcb6d8841e84aeb680c8524d3f612cc42cdfa Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:17:42 -0300 Subject: [PATCH 262/292] chore: added await in get new token --- packages/accounts-base/accounts_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 006cfe8ce8..d0767854ad 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -694,7 +694,7 @@ export class AccountsServer extends AccountsCommon { } const newStampedToken = accounts._generateStampedLoginToken(); newStampedToken.when = currentStampedToken.when; - accounts._insertLoginToken(this.userId, newStampedToken); + await accounts._insertLoginToken(this.userId, newStampedToken); return accounts._loginUser(this, this.userId, newStampedToken); }; From f1845a7d6be722a91af50410988cae2def9b1811 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:24:03 -0300 Subject: [PATCH 263/292] tests: solved hook callbacks can access Meteor.userId() --- packages/accounts-base/accounts_tests.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 27b8f8d160..78f07476b3 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -454,9 +454,9 @@ Tinytest.addAsync('accounts - remove other tokens', async (test) => { Tinytest.addAsync( 'accounts - hook callbacks can access Meteor.userId()', async test => { - const userId = Accounts.insertUserDoc({}, { username: Random.id() }); + const userId = await Accounts.insertUserDoc({}, { username: Random.id() }); const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); + await Accounts._insertLoginToken(userId, stampedToken); const validateStopper = Accounts.validateLoginAttempt(attempt => { test.equal(Meteor.userId(), validateAttemptExpectedUserId, "validateLoginAttempt"); @@ -478,20 +478,22 @@ Tinytest.addAsync( // On a new connection, Meteor.userId() should be null until logged in. let validateAttemptExpectedUserId = null; const onLoginExpectedUserId = userId; - conn.call('login', { resume: stampedToken.token }); + await conn.callAsync('login', { resume: stampedToken.token }); // Now that the user is logged in on the connection, Meteor.userId() should // return that user. validateAttemptExpectedUserId = userId; - conn.call('login', { resume: stampedToken.token }); + await conn.callAsync('login', { resume: stampedToken.token }); // Trigger onLoginFailure callbacks const onLoginFailureExpectedUserId = userId; - test.throws(() => conn.call('login', { resume: "bogus" }), '403'); + await test.throwsAsync( + async () => + await conn.callAsync('login', { resume: "bogus" }), '403'); // Trigger onLogout callbacks const onLogoutExpectedUserId = userId; - conn.call('logout'); + await conn.callAsync('logout'); conn.disconnect(); validateStopper.stop(); From bd6d9dab287620e90bbe5b60d17229165688caf6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:32:50 -0300 Subject: [PATCH 264/292] tests: solved hook callbacks obey options.defaultFieldSelector --- packages/accounts-base/accounts_tests.js | 234 ++++++++++++----------- 1 file changed, 121 insertions(+), 113 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 78f07476b3..efb69dc3b4 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -14,7 +14,7 @@ Meteor.methods({ // (impossible?) Tinytest.add( 'accounts - config validates keys', - test => test.throws(() => Accounts.config({foo: "bar"})) + test => test.throws(() => Accounts.config({ foo: "bar" })) ); Tinytest.addAsync('accounts - config - token lifetime', async test => { @@ -65,8 +65,8 @@ Tinytest.addAsync('accounts - config - default token lifetime', async test => { Tinytest.addAsync('accounts - config - defaultFieldSelector', async test => { const options = Accounts._options; Accounts._options = {}; - const setValue = {bigArray: 0}; - Accounts.config({defaultFieldSelector: setValue}); + const setValue = { bigArray: 0 }; + Accounts.config({ defaultFieldSelector: setValue }); test.equal(Accounts._options.defaultFieldSelector, setValue); Accounts._options = options; }); @@ -87,8 +87,8 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', // create an account with facebook const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', {id: facebookId, monkey: 42}, {profile: {foo: 1}}).id; - const users1 = Meteor.users.find({"services.facebook.id": facebookId}).fetch(); + 'facebook', { id: facebookId, monkey: 42 }, { profile: { foo: 1 } }).id; + const users1 = Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); test.length(users1, 1); test.equal(users1[0].profile.foo, 1); test.equal(users1[0].services.facebook.monkey, 42); @@ -96,10 +96,10 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', // create again with the same id, see that we get the same user. // it should update services.facebook but not profile. const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', {id: facebookId, llama: 50}, - {profile: {foo: 1000, bar: 2}}).id; + 'facebook', { id: facebookId, llama: 50 }, + { profile: { foo: 1000, bar: 2 } }).id; test.equal(uid1, uid2); - const users2 = Meteor.users.find({"services.facebook.id": facebookId}).fetch(); + const users2 = Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); test.length(users2, 1); test.equal(users2[0].profile.foo, 1); test.equal(users2[0].profile.bar, undefined); @@ -144,14 +144,14 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', as // users that have different service ids get different users const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', {id: weiboId1}, {profile: {foo: 1}}).id; + 'weibo', { id: weiboId1 }, { profile: { foo: 1 } }).id; const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', {id: weiboId2}, {profile: {bar: 2}}).id; - test.equal(Meteor.users.find({"services.weibo.id": {$in: [weiboId1, weiboId2]}}).count(), 2); - test.equal(Meteor.users.findOne({"services.weibo.id": weiboId1}).profile.foo, 1); - test.equal(Meteor.users.findOne({"services.weibo.id": weiboId1}).emails, undefined); - test.equal(Meteor.users.findOne({"services.weibo.id": weiboId2}).profile.bar, 2); - test.equal(Meteor.users.findOne({"services.weibo.id": weiboId2}).emails, undefined); + 'weibo', { id: weiboId2 }, { profile: { bar: 2 } }).id; + test.equal(Meteor.users.find({ "services.weibo.id": { $in: [weiboId1, weiboId2] } }).count(), 2); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).profile.foo, 1); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).emails, undefined); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).profile.bar, 2); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).emails, undefined); // cleanup Meteor.users.remove(uid1); @@ -160,12 +160,12 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', as Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', async test => { const twitterIdOld = parseInt(Random.hexString(4), 16); - const twitterIdNew = ''+twitterIdOld; + const twitterIdNew = '' + twitterIdOld; // create an account with twitter using the old ID format of integer const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', {id: twitterIdOld, monkey: 42}, {profile: {foo: 1}}).id; - const users1 = Meteor.users.find({"services.twitter.id": twitterIdOld}).fetch(); + 'twitter', { id: twitterIdOld, monkey: 42 }, { profile: { foo: 1 } }).id; + const users1 = Meteor.users.find({ "services.twitter.id": twitterIdOld }).fetch(); test.length(users1, 1); test.equal(users1[0].profile.foo, 1); test.equal(users1[0].services.twitter.monkey, 42); @@ -174,9 +174,9 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', // test that the existing user is found, and that the ID // gets updated to a string value const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', {id: twitterIdNew, monkey: 42}, {profile: {foo: 1}}).id; + 'twitter', { id: twitterIdNew, monkey: 42 }, { profile: { foo: 1 } }).id; test.equal(uid1, uid2); - const users2 = Meteor.users.find({"services.twitter.id": twitterIdNew}).fetch(); + const users2 = Meteor.users.find({ "services.twitter.id": twitterIdNew }).fetch(); test.length(users2, 1); // cleanup @@ -191,7 +191,7 @@ Tinytest.addAsync('accounts - insertUserDoc username', async test => { // user does not already exist. create a user object with fields set. const userId = await Accounts.insertUserDoc( - {profile: {name: 'Foo Bar'}}, + { profile: { name: 'Foo Bar' } }, userIn ); const userOut = await Meteor.users.findOne(userId); @@ -201,7 +201,7 @@ Tinytest.addAsync('accounts - insertUserDoc username', async test => { // run the hook again. now the user exists, so it throws an error. await test.throwsAsync( - async () => await Accounts.insertUserDoc({profile: {name: 'Foo Bar'}}, userIn), + async () => await Accounts.insertUserDoc({ profile: { name: 'Foo Bar' } }, userIn), 'Username already exists.' ); @@ -214,13 +214,13 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { const email2 = Random.id(); const email3 = Random.id(); const userIn = { - emails: [{address: email1, verified: false}, - {address: email2, verified: true}] + emails: [{ address: email1, verified: false }, + { address: email2, verified: true }] }; // user does not already exist. create a user object with fields set. const userId = await Accounts.insertUserDoc( - {profile: {name: 'Foo Bar'}}, + { profile: { name: 'Foo Bar' } }, userIn ); const userOut = await Meteor.users.findOne(userId); @@ -252,7 +252,7 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { // a third email works. const userId3 = await Accounts.insertUserDoc( - {}, {emails: [{address: email3}]} + {}, { emails: [{ address: email3 }] } ); const user3 = await Meteor.users.findOne(userId3); test.equal(typeof user3.createdAt, 'object'); @@ -265,9 +265,11 @@ Tinytest.addAsync('accounts - insertUserDoc email', async test => { // More token expiration tests are in accounts-password Tinytest.addAsync('accounts - expire numeric token', async (test, onComplete) => { const userIn = { username: Random.id() }; - const userId = await Accounts.insertUserDoc({ profile: { - name: 'Foo Bar' - } }, userIn); + const userId = await Accounts.insertUserDoc({ + profile: { + name: 'Foo Bar' + } + }, userIn); const date = new Date(new Date() - 5000); await Meteor.users.update(userId, { $set: { @@ -283,7 +285,7 @@ Tinytest.addAsync('accounts - expire numeric token', async (test, onComplete) => const observe = await Meteor.users.find(userId).observe({ changed: newUser => { if (newUser.services && newUser.services.resume && - (!newUser.services.resume.loginTokens || + (!newUser.services.resume.loginTokens || newUser.services.resume.loginTokens.length === 0)) { observe.stop(); onComplete(); @@ -299,7 +301,7 @@ Tinytest.addAsync('accounts - expire numeric token', async (test, onComplete) => const insertUnhashedLoginToken = async (userId, stampedToken) => { await Meteor.users.update( userId, - {$push: {'services.resume.loginTokens': stampedToken}} + { $push: { 'services.resume.loginTokens': stampedToken } } ); }; @@ -422,15 +424,16 @@ Tinytest.addAsync('accounts - remove other tokens', async (test) => { const stampedTokens = []; const conns = []; - for(let i = 0; i < 2; i++) { + for (let i = 0; i < 2; i++) { stampedTokens.push(Accounts._generateStampedLoginToken()); await Accounts._insertLoginToken(userId, stampedTokens[i]); const conn = DDP.connect(Meteor.absoluteUrl()); await conn.callAsync('login', { resume: stampedTokens[i].token }); test.equal(await conn.callAsync('getCurrentLoginToken'), - Accounts._hashLoginToken(stampedTokens[i].token)); + Accounts._hashLoginToken(stampedTokens[i].token)); conns.push(conn); - }; + } + ; await conns[0].callAsync('removeOtherTokens'); simplePoll(async () => { @@ -438,7 +441,7 @@ Tinytest.addAsync('accounts - remove other tokens', async (test) => { for (const conn of conns) { tokens.push(await conn.callAsync('getCurrentLoginToken')); } - return ! tokens[1] && + return !tokens[1] && tokens[0] === Accounts._hashLoginToken(stampedTokens[0].token); }, () => { // success @@ -507,13 +510,14 @@ Tinytest.addAsync( 'accounts - hook callbacks obey options.defaultFieldSelector', async test => { const ignoreFieldName = "bigArray"; - const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1] }); + const userId = + await Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1] }); const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); + await Accounts._insertLoginToken(userId, stampedToken); const options = Accounts._options; Accounts._options = {}; - Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); - test.equal(Accounts._options.defaultFieldSelector, {[ignoreFieldName]: 0}, 'defaultFieldSelector'); + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); + test.equal(Accounts._options.defaultFieldSelector, { [ignoreFieldName]: 0 }, 'defaultFieldSelector'); const validateStopper = Accounts.validateLoginAttempt(attempt => { test.isUndefined(allowLogin != 'bogus' ? attempt.user[ignoreFieldName] : attempt.user, "validateLoginAttempt") @@ -533,23 +537,27 @@ Tinytest.addAsync( // test a new connection let allowLogin = true; - conn.call('login', { resume: stampedToken.token }); + await conn.callAsync('login', { resume: stampedToken.token }); // Now that the user is logged in on the connection, Meteor.userId() should // return that user. - conn.call('login', { resume: stampedToken.token }); + await conn.callAsync('login', { resume: stampedToken.token }); // Trigger onLoginFailure callbacks, this will not include the user object allowLogin = 'bogus'; - test.throws(() => conn.call('login', { resume: "bogus" }), '403'); + await test.throwsAsync( + async () => + await conn.callAsync('login', { resume: "bogus" }), '403'); // test a forced login fail which WILL include the user object allowLogin = false; - test.throws(() => conn.call('login', { resume: stampedToken.token }), '403'); + await test.throwsAsync( + async () => + await conn.callAsync('login', { resume: stampedToken.token }), '403'); // Trigger onLogout callbacks const onLogoutExpectedUserId = userId; - conn.call('logout'); + await conn.callAsync('logout'); Accounts._options = options; conn.disconnect(); @@ -581,31 +589,31 @@ Tinytest.addAsync( test.isNotUndefined(user[ignoreFieldName], 'included by default'); // test the field is excluded - Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); user = Meteor.user(); test.isUndefined(user[ignoreFieldName], 'excluded'); user = Meteor.user({}); test.isUndefined(user[ignoreFieldName], 'excluded {}'); // test the field can still be retrieved if required - user = Meteor.user({fields: {[ignoreFieldName]: 1}}); + user = Meteor.user({ fields: { [ignoreFieldName]: 1 } }); test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); test.isUndefined(user.username, 'field can be retrieved username'); // test a combined negative field specifier - user = Meteor.user({fields: {username: 0}}); + user = Meteor.user({ fields: { username: 0 } }); test.isUndefined(user[ignoreFieldName], 'combined field selector'); test.isUndefined(user.username, 'combined field selector username'); // test an explicit request for the full user object - user = Meteor.user({fields: {}}); + user = Meteor.user({ fields: {} }); test.isNotUndefined(user[ignoreFieldName], 'full selector'); test.isNotUndefined(user.username, 'full selector username'); Accounts._options = {}; // Test that a custom field gets retrieved properly - Accounts.config({defaultFieldSelector: {[customField]: 1}}); + Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); user = Meteor.user() test.isNotUndefined(user[customField]); test.isUndefined(user.username); @@ -619,7 +627,7 @@ Tinytest.addAsync( Tinytest.addAsync( 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', - async test => { + async test => { const ignoreFieldName = "bigArray"; const customField = "customField"; const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); @@ -684,7 +692,7 @@ Tinytest.addAsync( { profile: { foo: 1 } }, ).userId; const ignoreFieldName = "bigArray"; - const c = Meteor.users.update(uid1, {$set: {[ignoreFieldName]: [1]}}); + const c = Meteor.users.update(uid1, { $set: { [ignoreFieldName]: [1] } }); let users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); @@ -696,7 +704,7 @@ Tinytest.addAsync( // Also verify that the user object is filtered by _options.defaultFieldSelector const accountsOptions = Accounts._options; Accounts._options = {}; - Accounts.config({defaultFieldSelector: {[ignoreFieldName]: 0}}); + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); Accounts.onExternalLogin((options, user) => { options.profile.foo = 2; test.isUndefined(users[ignoreFieldName], 'ignoreField - after limit fields'); @@ -734,79 +742,79 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - verify beforeExternalLogin hook can stop user login', - async test => { - // Verify user data is saved properly when not using the - // beforeExternalLogin hook. - let facebookId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', - { id: facebookId }, - { profile: { foo: 1 } }, - ).userId; - const ignoreFieldName = "bigArray"; - const c = Meteor.users.update(uid1, {$set: {[ignoreFieldName]: [1]}}); - let users = - Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); - test.length(users, 1); - test.equal(users[0].profile.foo, 1); - test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); + 'accounts - verify beforeExternalLogin hook can stop user login', + async test => { + // Verify user data is saved properly when not using the + // beforeExternalLogin hook. + let facebookId = Random.id(); + const uid1 = Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + ).userId; + const ignoreFieldName = "bigArray"; + const c = Meteor.users.update(uid1, { $set: { [ignoreFieldName]: [1] } }); + let users = + Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + test.length(users, 1); + test.equal(users[0].profile.foo, 1); + test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); - // Verify that when beforeExternalLogin returns false - // that an error throws and user is not saved - Accounts.beforeExternalLogin((serviceName, serviceData, user) => { - // Check that we get the correct data - test.equal(serviceName, 'facebook'); - test.equal(serviceData, { id: facebookId }); - test.equal(user._id, uid1); - return false - }); + // Verify that when beforeExternalLogin returns false + // that an error throws and user is not saved + Accounts.beforeExternalLogin((serviceName, serviceData, user) => { + // Check that we get the correct data + test.equal(serviceName, 'facebook'); + test.equal(serviceData, { id: facebookId }); + test.equal(user._id, uid1); + return false + }); - test.throws(() => Accounts.updateOrCreateUserFromExternalService( - 'facebook', - { id: facebookId }, - { profile: { foo: 1 } }, - )); + test.throws(() => Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + )); - // Cleanup - Meteor.users.remove(uid1); - Accounts._beforeExternalLoginHook = null; - } + // Cleanup + Meteor.users.remove(uid1); + Accounts._beforeExternalLoginHook = null; + } ); Tinytest.addAsync( 'accounts - verify setAdditionalFindUserOnExternalLogin hook can provide user', async test => { - // create test user, without a google service - const testEmail = "test@testdomain.com" - const uid0 = Accounts.createUser({email: testEmail}) + // create test user, without a google service + const testEmail = "test@testdomain.com" + const uid0 = Accounts.createUser({ email: testEmail }) - // Verify that user is found from email and service merged - Accounts.setAdditionalFindUserOnExternalLogin(({serviceName, serviceData}) => { - if (serviceName === "google") { - return Accounts.findUserByEmail(serviceData.email) - } - }) - - let googleId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'google', - { id: googleId, email: testEmail }, - { profile: { foo: 1 } }, - ).userId; - - test.equal(uid0, uid1) - - // Cleanup - if (uid1 !== uid0) { - Meteor.users.remove(uid0) + // Verify that user is found from email and service merged + Accounts.setAdditionalFindUserOnExternalLogin(({ serviceName, serviceData }) => { + if (serviceName === "google") { + return Accounts.findUserByEmail(serviceData.email) } - Meteor.users.remove(uid1); - Accounts.selectCustomUserOnExternalLogin = null; + }) + + let googleId = Random.id(); + const uid1 = Accounts.updateOrCreateUserFromExternalService( + 'google', + { id: googleId, email: testEmail }, + { profile: { foo: 1 } }, + ).userId; + + test.equal(uid0, uid1) + + // Cleanup + if (uid1 !== uid0) { + Meteor.users.remove(uid0) + } + Meteor.users.remove(uid1); + Accounts.selectCustomUserOnExternalLogin = null; } ); -if(Meteor.isServer) { +if (Meteor.isServer) { Tinytest.addAsync( 'accounts - make sure that extra params to accounts urls are added', async test => { @@ -815,7 +823,7 @@ if(Meteor.isServer) { test.equal(verifyEmailURL.searchParams.toString(), ""); // Extra params - const extraParams = { test: 'success'}; + const extraParams = { test: 'success' }; const resetPasswordURL = new URL(Accounts.urls.resetPassword('test', extraParams)); test.equal(resetPasswordURL.searchParams.get('test'), extraParams.test); const enrollAccountURL = new URL(Accounts.urls.enrollAccount('test', extraParams)); From 76ba34a8b0e8e79adb413073c5fbf2017a5351c7 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:38:51 -0300 Subject: [PATCH 265/292] tests: solved Meteor.user() obeys options.defaultFieldSelector --- packages/accounts-base/accounts_tests.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index efb69dc3b4..12b0d36109 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -573,40 +573,42 @@ Tinytest.addAsync( async test => { const ignoreFieldName = "bigArray"; const customField = "customField"; - const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const userId = + await Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); + await Accounts._insertLoginToken(userId, stampedToken); const options = Accounts._options; // stub Meteor.userId() so it works outside methods and returns the correct user: const origAccountsUserId = Accounts.userId; - Accounts.userId = () => userId; + Accounts.userId = + () => userId; Accounts._options = {}; // test the field is included by default - let user = Meteor.user(); + let user = await Meteor.user(); test.isNotUndefined(user[ignoreFieldName], 'included by default'); // test the field is excluded Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); - user = Meteor.user(); + user = await Meteor.user(); test.isUndefined(user[ignoreFieldName], 'excluded'); - user = Meteor.user({}); + user = await Meteor.user({}); test.isUndefined(user[ignoreFieldName], 'excluded {}'); // test the field can still be retrieved if required - user = Meteor.user({ fields: { [ignoreFieldName]: 1 } }); + user = await Meteor.user({ fields: { [ignoreFieldName]: 1 } }); test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); test.isUndefined(user.username, 'field can be retrieved username'); // test a combined negative field specifier - user = Meteor.user({ fields: { username: 0 } }); + user = await Meteor.user({ fields: { username: 0 } }); test.isUndefined(user[ignoreFieldName], 'combined field selector'); test.isUndefined(user.username, 'combined field selector username'); // test an explicit request for the full user object - user = Meteor.user({ fields: {} }); + user = await Meteor.user({ fields: {} }); test.isNotUndefined(user[ignoreFieldName], 'full selector'); test.isNotUndefined(user.username, 'full selector username'); @@ -614,7 +616,7 @@ Tinytest.addAsync( // Test that a custom field gets retrieved properly Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); - user = Meteor.user() + user = await Meteor.user() test.isNotUndefined(user[customField]); test.isUndefined(user.username); test.isUndefined(user[ignoreFieldName]); From 8e06687c2c3585ad2024fc6bdea2d4f7ea3e0b71 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:41:51 -0300 Subject: [PATCH 266/292] tests: solved verify onExternalLogin hook can update oauth user profiles --- packages/accounts-base/accounts_tests.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 12b0d36109..77b51de146 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -688,15 +688,15 @@ Tinytest.addAsync( // Verify user profile data is saved properly when not using the // onExternalLogin hook. let facebookId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( + const u1 = await Accounts.updateOrCreateUserFromExternalService( 'facebook', { id: facebookId }, { profile: { foo: 1 } }, - ).userId; + ); const ignoreFieldName = "bigArray"; - const c = Meteor.users.update(uid1, { $set: { [ignoreFieldName]: [1] } }); + const c = await Meteor.users.update(u1.userId, { $set: { [ignoreFieldName]: [1] } }); let users = - Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + await Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 1); test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); @@ -712,13 +712,13 @@ Tinytest.addAsync( test.isUndefined(users[ignoreFieldName], 'ignoreField - after limit fields'); return options; }); - Accounts.updateOrCreateUserFromExternalService( + await Accounts.updateOrCreateUserFromExternalService( 'facebook', { id: facebookId }, { profile: { foo: 1 } }, ); // test.isUndefined(users[0][ignoreFieldName], 'ignoreField - fields limited'); - users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + users = await Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 2); test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - still there'); @@ -726,18 +726,18 @@ Tinytest.addAsync( // Verify user profile data can be modified using the onExternalLogin // hook, for new users. facebookId = Random.id(); - const uid2 = Accounts.updateOrCreateUserFromExternalService( + const u2 = await Accounts.updateOrCreateUserFromExternalService( 'facebook', { id: facebookId }, { profile: { foo: 3 } }, - ).userId; - users = Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + ); + users = await Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); test.length(users, 1); test.equal(users[0].profile.foo, 2); // Cleanup - Meteor.users.remove(uid1); - Meteor.users.remove(uid2); + await Meteor.users.remove(u1); + await Meteor.users.remove(u2.userId); Accounts._onExternalLoginHook = null; Accounts._options = accountsOptions; } From bb4c5f2ca58f640bcbf99a40431beb3500bbdf0d Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:46:13 -0300 Subject: [PATCH 267/292] tests: solved verify beforeExternalLogin hook can stop user login --- packages/accounts-base/accounts_tests.js | 43 +++++++++++++++--------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 77b51de146..6130cf30d1 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -694,9 +694,13 @@ Tinytest.addAsync( { profile: { foo: 1 } }, ); const ignoreFieldName = "bigArray"; - const c = await Meteor.users.update(u1.userId, { $set: { [ignoreFieldName]: [1] } }); + + const c = + await Meteor.users.update(u1.userId, { $set: { [ignoreFieldName]: [1] } }); + let users = await Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + test.length(users, 1); test.equal(users[0].profile.foo, 1); test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); @@ -749,15 +753,22 @@ Tinytest.addAsync( // Verify user data is saved properly when not using the // beforeExternalLogin hook. let facebookId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', - { id: facebookId }, - { profile: { foo: 1 } }, - ).userId; + + const u = + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + ); + const ignoreFieldName = "bigArray"; - const c = Meteor.users.update(uid1, { $set: { [ignoreFieldName]: [1] } }); + + const c = + await Meteor.users.update(u.userId, { $set: { [ignoreFieldName]: [1] } }); + let users = - Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + await Meteor.users.find({ 'services.facebook.id': facebookId }).fetch(); + test.length(users, 1); test.equal(users[0].profile.foo, 1); test.isNotUndefined(users[0][ignoreFieldName], 'ignoreField - before limit fields'); @@ -768,18 +779,20 @@ Tinytest.addAsync( // Check that we get the correct data test.equal(serviceName, 'facebook'); test.equal(serviceData, { id: facebookId }); - test.equal(user._id, uid1); + test.equal(user._id, u.userId); return false }); - test.throws(() => Accounts.updateOrCreateUserFromExternalService( - 'facebook', - { id: facebookId }, - { profile: { foo: 1 } }, - )); + await test.throwsAsync( + async () => + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', + { id: facebookId }, + { profile: { foo: 1 } }, + )); // Cleanup - Meteor.users.remove(uid1); + await Meteor.users.remove(u.userId); Accounts._beforeExternalLoginHook = null; } ); From c5432bd12472221614524236f397c4c4bc39a48a Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:54:00 -0300 Subject: [PATCH 268/292] tests: solved verify setAdditionalFindUserOnExternalLogin hook can provide user --- packages/accounts-base/accounts_tests.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 6130cf30d1..6e1269930f 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -802,29 +802,28 @@ Tinytest.addAsync( async test => { // create test user, without a google service const testEmail = "test@testdomain.com" - const uid0 = Accounts.createUser({ email: testEmail }) + const uid0 = await Accounts.createUser({ email: testEmail }) // Verify that user is found from email and service merged - Accounts.setAdditionalFindUserOnExternalLogin(({ serviceName, serviceData }) => { + Accounts.setAdditionalFindUserOnExternalLogin(async ({ serviceName, serviceData }) => { if (serviceName === "google") { - return Accounts.findUserByEmail(serviceData.email) + return await Accounts.findUserByEmail(serviceData.email) } }) let googleId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( + const u1 = await Accounts.updateOrCreateUserFromExternalService( 'google', { id: googleId, email: testEmail }, { profile: { foo: 1 } }, - ).userId; - - test.equal(uid0, uid1) + ); + test.equal(uid0, u1.userId) // Cleanup - if (uid1 !== uid0) { - Meteor.users.remove(uid0) + if (u1.userId !== uid0) { + await Meteor.users.remove(uid0) } - Meteor.users.remove(uid1); + await Meteor.users.remove(u1.userId); Accounts.selectCustomUserOnExternalLogin = null; } ); From 3d047f8b4d19d66fc27fc9ec33ac2763e89af354 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 15:54:09 -0300 Subject: [PATCH 269/292] chore: added await to _additionalFindUserOnExternalLogin --- packages/accounts-base/accounts_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index d0767854ad..c6d46fc3cf 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1335,7 +1335,7 @@ export class AccountsServer extends AccountsCommon { // Check to see if the developer has a custom way to find the user outside // of the general selectors above. if (!user && this._additionalFindUserOnExternalLogin) { - user = this._additionalFindUserOnExternalLogin({serviceName, serviceData, options}) + user = await this._additionalFindUserOnExternalLogin({serviceName, serviceData, options}) } // Before continuing, run user hook to see if we should continue From ece19bad1d7f11d7083750f58fb0daeebc1b6d30 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 16:03:26 -0300 Subject: [PATCH 270/292] tests: solved facebook --- packages/accounts-base/accounts_tests.js | 32 ++++++++++++++---------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 6e1269930f..9b3029607a 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -13,7 +13,7 @@ Meteor.methods({ // *are* validated, but Accounts._options is global state which makes this hard // (impossible?) Tinytest.add( - 'accounts - config validates keys', + 'accounts - config - validates keys', test => test.throws(() => Accounts.config({ foo: "bar" })) ); @@ -86,20 +86,24 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', const facebookId = Random.id(); // create an account with facebook - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', { id: facebookId, monkey: 42 }, { profile: { foo: 1 } }).id; - const users1 = Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); + const u1 = + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', { id: facebookId, monkey: 42 }, { profile: { foo: 1 } }); + const users1 = + await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); test.length(users1, 1); test.equal(users1[0].profile.foo, 1); test.equal(users1[0].services.facebook.monkey, 42); // create again with the same id, see that we get the same user. // it should update services.facebook but not profile. - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'facebook', { id: facebookId, llama: 50 }, - { profile: { foo: 1000, bar: 2 } }).id; - test.equal(uid1, uid2); - const users2 = Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); + const u2 = + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', { id: facebookId, llama: 50 }, + { profile: { foo: 1000, bar: 2 } }); + test.equal(u1.id, u2.id); + const users2 = + await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); test.length(users2, 1); test.equal(users2[0].profile.foo, 1); test.equal(users2[0].profile.bar, undefined); @@ -109,7 +113,7 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', test.equal(users2[0].services.facebook.monkey, 42); // cleanup - Meteor.users.remove(uid1); + await Meteor.users.remove(u1.id); }); Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Meteor Developer', async test => { @@ -632,14 +636,16 @@ Tinytest.addAsync( async test => { const ignoreFieldName = "bigArray"; const customField = "customField"; - const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const userId = + await Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); + await Accounts._insertLoginToken(userId, stampedToken); const options = Accounts._options; // stub Meteor.userId() so it works outside methods and returns the correct user: const origAccountsUserId = Accounts.userId; - Accounts.userId = () => userId; + Accounts.userId = + () => userId; Accounts._options = {}; From d7c2d0868d2283f8b85b20348d770f14d983a22c Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 16:05:07 -0300 Subject: [PATCH 271/292] tests: solved Meteor Developer --- packages/accounts-base/accounts_tests.js | 217 ++++++++++++----------- 1 file changed, 111 insertions(+), 106 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 9b3029607a..739b6b28f3 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -82,112 +82,6 @@ Tinytest.addAsync('accounts - validateNewUser gets passed user with _id', async test.isTrue(userId in idsInValidateNewUser); }); -Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', async test => { - const facebookId = Random.id(); - - // create an account with facebook - const u1 = - await Accounts.updateOrCreateUserFromExternalService( - 'facebook', { id: facebookId, monkey: 42 }, { profile: { foo: 1 } }); - const users1 = - await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); - test.length(users1, 1); - test.equal(users1[0].profile.foo, 1); - test.equal(users1[0].services.facebook.monkey, 42); - - // create again with the same id, see that we get the same user. - // it should update services.facebook but not profile. - const u2 = - await Accounts.updateOrCreateUserFromExternalService( - 'facebook', { id: facebookId, llama: 50 }, - { profile: { foo: 1000, bar: 2 } }); - test.equal(u1.id, u2.id); - const users2 = - await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); - test.length(users2, 1); - test.equal(users2[0].profile.foo, 1); - test.equal(users2[0].profile.bar, undefined); - test.equal(users2[0].services.facebook.llama, 50); - // make sure we *don't* lose values not passed this call to - // updateOrCreateUserFromExternalService - test.equal(users2[0].services.facebook.monkey, 42); - - // cleanup - await Meteor.users.remove(u1.id); -}); - -Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Meteor Developer', async test => { - const developerId = Random.id(); - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'meteor-developer', - { id: developerId, username: 'meteor-developer' }, - { profile: { name: 'meteor-developer' } } - ).id; - const users1 = Meteor.users.find({ 'services.meteor-developer.id': developerId }).fetch(); - test.length(users1, 1); - test.equal(users1[0].profile.name, 'meteor-developer'); - - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'meteor-developer', - { id: developerId, username: 'meteor-developer' }, - { profile: { name: 'meteor-developer', username: 'developer' } } - ).id; - test.equal(uid1, uid2); - const users2 = Meteor.users.find({ 'services.meteor-developer.id': developerId }).fetch(); - test.length(users2, 1); - test.equal(users1[0].profile.name, 'meteor-developer'); - test.equal(users1[0].profile.username, undefined); - - // cleanup - Meteor.users.remove(uid1); -}); - -Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', async test => { - const weiboId1 = Random.id(); - const weiboId2 = Random.id(); - - // users that have different service ids get different users - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', { id: weiboId1 }, { profile: { foo: 1 } }).id; - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', { id: weiboId2 }, { profile: { bar: 2 } }).id; - test.equal(Meteor.users.find({ "services.weibo.id": { $in: [weiboId1, weiboId2] } }).count(), 2); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).profile.foo, 1); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).emails, undefined); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).profile.bar, 2); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).emails, undefined); - - // cleanup - Meteor.users.remove(uid1); - Meteor.users.remove(uid2); -}); - -Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', async test => { - const twitterIdOld = parseInt(Random.hexString(4), 16); - const twitterIdNew = '' + twitterIdOld; - - // create an account with twitter using the old ID format of integer - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', { id: twitterIdOld, monkey: 42 }, { profile: { foo: 1 } }).id; - const users1 = Meteor.users.find({ "services.twitter.id": twitterIdOld }).fetch(); - test.length(users1, 1); - test.equal(users1[0].profile.foo, 1); - test.equal(users1[0].services.twitter.monkey, 42); - - // Update the account with the new ID format of string - // test that the existing user is found, and that the ID - // gets updated to a string value - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', { id: twitterIdNew, monkey: 42 }, { profile: { foo: 1 } }).id; - test.equal(uid1, uid2); - const users2 = Meteor.users.find({ "services.twitter.id": twitterIdNew }).fetch(); - test.length(users2, 1); - - // cleanup - await Meteor.users.remove(uid1); -}); - - Tinytest.addAsync('accounts - insertUserDoc username', async test => { const userIn = { username: Random.id() @@ -851,3 +745,114 @@ if (Meteor.isServer) { } ); } + +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Facebook', async test => { + const facebookId = Random.id(); + + // create an account with facebook + const u1 = + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', { id: facebookId, monkey: 42 }, { profile: { foo: 1 } }); + const users1 = + await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); + test.length(users1, 1); + test.equal(users1[0].profile.foo, 1); + test.equal(users1[0].services.facebook.monkey, 42); + + // create again with the same id, see that we get the same user. + // it should update services.facebook but not profile. + const u2 = + await Accounts.updateOrCreateUserFromExternalService( + 'facebook', { id: facebookId, llama: 50 }, + { profile: { foo: 1000, bar: 2 } }); + test.equal(u1.id, u2.id); + const users2 = + await Meteor.users.find({ "services.facebook.id": facebookId }).fetch(); + test.length(users2, 1); + test.equal(users2[0].profile.foo, 1); + test.equal(users2[0].profile.bar, undefined); + test.equal(users2[0].services.facebook.llama, 50); + // make sure we *don't* lose values not passed this call to + // updateOrCreateUserFromExternalService + test.equal(users2[0].services.facebook.monkey, 42); + + // cleanup + await Meteor.users.remove(u1.id); +}); + +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Meteor Developer', async test => { + const developerId = + Random.id(); + const u1 = + await Accounts.updateOrCreateUserFromExternalService( + 'meteor-developer', + { id: developerId, username: 'meteor-developer' }, + { profile: { name: 'meteor-developer' } } + ); + const users1 = + await Meteor.users.find({ 'services.meteor-developer.id': developerId }).fetch(); + test.length(users1, 1); + test.equal(users1[0].profile.name, 'meteor-developer'); + + const u2 = + await Accounts.updateOrCreateUserFromExternalService( + 'meteor-developer', + { id: developerId, username: 'meteor-developer' }, + { profile: { name: 'meteor-developer', username: 'developer' } } + ); + test.equal(u1.id, u2.id); + const users2 = + await Meteor.users.find({ 'services.meteor-developer.id': developerId }).fetch(); + test.length(users2, 1); + test.equal(users1[0].profile.name, 'meteor-developer'); + test.equal(users1[0].profile.username, undefined); + + // cleanup + await Meteor.users.remove(u1); +}); + +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', async test => { + const weiboId1 = Random.id(); + const weiboId2 = Random.id(); + + // users that have different service ids get different users + const uid1 = Accounts.updateOrCreateUserFromExternalService( + 'weibo', { id: weiboId1 }, { profile: { foo: 1 } }).id; + const uid2 = Accounts.updateOrCreateUserFromExternalService( + 'weibo', { id: weiboId2 }, { profile: { bar: 2 } }).id; + test.equal(Meteor.users.find({ "services.weibo.id": { $in: [weiboId1, weiboId2] } }).count(), 2); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).profile.foo, 1); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).emails, undefined); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).profile.bar, 2); + test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).emails, undefined); + + // cleanup + Meteor.users.remove(uid1); + Meteor.users.remove(uid2); +}); + +Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', async test => { + const twitterIdOld = parseInt(Random.hexString(4), 16); + const twitterIdNew = '' + twitterIdOld; + + // create an account with twitter using the old ID format of integer + const uid1 = Accounts.updateOrCreateUserFromExternalService( + 'twitter', { id: twitterIdOld, monkey: 42 }, { profile: { foo: 1 } }).id; + const users1 = Meteor.users.find({ "services.twitter.id": twitterIdOld }).fetch(); + test.length(users1, 1); + test.equal(users1[0].profile.foo, 1); + test.equal(users1[0].services.twitter.monkey, 42); + + // Update the account with the new ID format of string + // test that the existing user is found, and that the ID + // gets updated to a string value + const uid2 = Accounts.updateOrCreateUserFromExternalService( + 'twitter', { id: twitterIdNew, monkey: 42 }, { profile: { foo: 1 } }).id; + test.equal(uid1, uid2); + const users2 = Meteor.users.find({ "services.twitter.id": twitterIdNew }).fetch(); + test.length(users2, 1); + + // cleanup + await Meteor.users.remove(uid1); +}); + From a5639c11201d629378cf0738e1f752f881e32f1e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 16:09:51 -0300 Subject: [PATCH 272/292] tests: solved twtitter --- packages/accounts-base/accounts_tests.js | 55 +++++++++++++++--------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 739b6b28f3..4431c7f6a9 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -812,23 +812,32 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Meteor Dev }); Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Weibo', async test => { - const weiboId1 = Random.id(); - const weiboId2 = Random.id(); + const weiboId1 = + Random.id(); + const weiboId2 = + Random.id(); // users that have different service ids get different users - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', { id: weiboId1 }, { profile: { foo: 1 } }).id; - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'weibo', { id: weiboId2 }, { profile: { bar: 2 } }).id; - test.equal(Meteor.users.find({ "services.weibo.id": { $in: [weiboId1, weiboId2] } }).count(), 2); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).profile.foo, 1); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId1 }).emails, undefined); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).profile.bar, 2); - test.equal(Meteor.users.findOne({ "services.weibo.id": weiboId2 }).emails, undefined); + const u1 = + await Accounts.updateOrCreateUserFromExternalService( + 'weibo', { id: weiboId1 }, { profile: { foo: 1 } }); + const u2 = + await Accounts.updateOrCreateUserFromExternalService( + 'weibo', { id: weiboId2 }, { profile: { bar: 2 } }); + test.equal(await Meteor.users.find({ "services.weibo.id": { $in: [weiboId1, weiboId2] } }).count(), 2); + + const user1 = + await Meteor.users.findOne({ "services.weibo.id": weiboId1 }); + const user2 = + await Meteor.users.findOne({ "services.weibo.id": weiboId2 }); + test.equal(user1.profile.foo, 1); + test.equal(user1.emails, undefined); + test.equal(user2.profile.bar, 2); + test.equal(user2.emails, undefined); // cleanup - Meteor.users.remove(uid1); - Meteor.users.remove(uid2); + Meteor.users.remove(u1.id); + Meteor.users.remove(u2.id); }); Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', async test => { @@ -836,9 +845,11 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', const twitterIdNew = '' + twitterIdOld; // create an account with twitter using the old ID format of integer - const uid1 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', { id: twitterIdOld, monkey: 42 }, { profile: { foo: 1 } }).id; - const users1 = Meteor.users.find({ "services.twitter.id": twitterIdOld }).fetch(); + const u1 = + await Accounts.updateOrCreateUserFromExternalService( + 'twitter', { id: twitterIdOld, monkey: 42 }, { profile: { foo: 1 } }); + const users1 = + await Meteor.users.find({ "services.twitter.id": twitterIdOld }).fetch(); test.length(users1, 1); test.equal(users1[0].profile.foo, 1); test.equal(users1[0].services.twitter.monkey, 42); @@ -846,13 +857,15 @@ Tinytest.addAsync('accounts - updateOrCreateUserFromExternalService - Twitter', // Update the account with the new ID format of string // test that the existing user is found, and that the ID // gets updated to a string value - const uid2 = Accounts.updateOrCreateUserFromExternalService( - 'twitter', { id: twitterIdNew, monkey: 42 }, { profile: { foo: 1 } }).id; - test.equal(uid1, uid2); - const users2 = Meteor.users.find({ "services.twitter.id": twitterIdNew }).fetch(); + const u2 = + await Accounts.updateOrCreateUserFromExternalService( + 'twitter', { id: twitterIdNew, monkey: 42 }, { profile: { foo: 1 } }); + test.equal(u1.id, u2.id); + const users2 = + await Meteor.users.find({ "services.twitter.id": twitterIdNew }).fetch(); test.length(users2, 1); // cleanup - await Meteor.users.remove(uid1); + await Meteor.users.remove(u1.id); }); From 6f79cd8d13ee3c080060a20327ee8c4c08866747 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Thu, 8 Dec 2022 16:39:09 -0300 Subject: [PATCH 273/292] tests: finished --- packages/accounts-base/accounts_client_tests.js | 10 +++++----- packages/accounts-base/accounts_server.js | 17 +++++++++-------- packages/accounts-base/accounts_tests.js | 2 ++ packages/accounts-base/accounts_tests_setup.js | 4 ++-- packages/accounts-base/package.js | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 880a71e4fe..5558884273 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -36,9 +36,9 @@ const createUserAndLogout = (test, done, nextTests) => { }, }, () => { - Meteor.logout(() => { + Meteor.logout(async () => { // Make sure we're logged out - test.isFalse(Meteor.user()); + test.isFalse(await Meteor.userAsync()); // Handle next tests nextTests(test, done); }); @@ -245,13 +245,13 @@ Tinytest.addAsync( ); -Tinytest.addAsync( + Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails with invalid code', (test, done) => { createUserAndLogout(test, done, () => { forceEnableUser2fa(() => { - Meteor.loginWithPasswordAnd2faCode(username, password, 'ABC', e => { - test.isFalse(Meteor.user()); + Meteor.loginWithPasswordAnd2faCode(username, password, 'ABC', async e => { + test.isFalse(await Meteor.user()); test.equal(e.reason, 'Invalid 2FA code'); removeTestUser(done); }); diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index c6d46fc3cf..7b28f3bd22 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -402,10 +402,10 @@ export class AccountsServer extends AccountsCommon { // indicates that the login token has already been inserted into the // database and doesn't need to be inserted again. (It's used by the // "resume" login handler). - _loginUser(methodInvocation, userId, stampedLoginToken) { + async _loginUser(methodInvocation, userId, stampedLoginToken) { if (! stampedLoginToken) { stampedLoginToken = this._generateStampedLoginToken(); - this._insertLoginToken(userId, stampedLoginToken); + await this._insertLoginToken(userId, stampedLoginToken); } // This order (and the avoidance of yields) is important to make @@ -476,12 +476,13 @@ export class AccountsServer extends AccountsCommon { this._validateLogin(methodInvocation.connection, attempt); if (attempt.allowed) { + const o = await this._loginUser( + methodInvocation, + result.userId, + result.stampedLoginToken + ) const ret = { - ...this._loginUser( - methodInvocation, - result.userId, - result.stampedLoginToken - ), + ...o, ...result.options }; ret.type = attempt.type; @@ -695,7 +696,7 @@ export class AccountsServer extends AccountsCommon { const newStampedToken = accounts._generateStampedLoginToken(); newStampedToken.when = currentStampedToken.when; await accounts._insertLoginToken(this.userId, newStampedToken); - return accounts._loginUser(this, this.userId, newStampedToken); + return await accounts._loginUser(this, this.userId, newStampedToken); }; // Removes all tokens except the token associated with the current diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 4431c7f6a9..458c6ce589 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -702,6 +702,8 @@ Tinytest.addAsync( async test => { // create test user, without a google service const testEmail = "test@testdomain.com" + // being sure that the user is not already in the database + await Meteor.users.remove({ "emails.address": testEmail }); const uid0 = await Accounts.createUser({ email: testEmail }) // Verify that user is found from email and service merged diff --git a/packages/accounts-base/accounts_tests_setup.js b/packages/accounts-base/accounts_tests_setup.js index 31ed7e2196..c83ce5677b 100644 --- a/packages/accounts-base/accounts_tests_setup.js +++ b/packages/accounts-base/accounts_tests_setup.js @@ -9,7 +9,7 @@ const getTokenFromSecret = async ({ selector, secret: secretParam }) => { } secret = twoFactorAuthentication.secret; } - const { token } = Accounts._generate2faToken(secret); + const { token } = await Accounts._generate2faToken(secret); return token; }; @@ -30,7 +30,7 @@ Meteor.methods({ }, } ); - return getTokenFromSecret({ selector, secret }); + return await getTokenFromSecret({ selector, secret }); }, getTokenFromSecret, }); diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 9c89bb5fd5..b707f589a2 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -63,5 +63,5 @@ Package.onTest(api => { api.addFiles('accounts_tests_setup.js', 'server'); api.mainModule('server_tests.js', 'server'); - // api.mainModule('client_tests.js', 'client'); + api.mainModule('client_tests.js', 'client'); }); From f3b3a9ab2040dde34c4c6c56383b37ed4d4c12b2 Mon Sep 17 00:00:00 2001 From: denihs Date: Thu, 8 Dec 2022 15:52:38 -0400 Subject: [PATCH 274/292] making the test-in-browser component dark mode --- packages/test-in-browser/driver.css | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/test-in-browser/driver.css b/packages/test-in-browser/driver.css index 1a870bc9e9..f58f42fea1 100644 --- a/packages/test-in-browser/driver.css +++ b/packages/test-in-browser/driver.css @@ -1,6 +1,8 @@ body { height: 100vh; width: 100vw; + background-color: black !important; + color: white !important; } .test-in-browser { @@ -71,11 +73,12 @@ body { .test_table .groupname { font-weight: bold; - background: #ddd; + background: #212121; padding-left: 5px; line-height: 24px; vertical-align: middle; font-size: 16px; + color: white; } .test_table .event { @@ -114,11 +117,11 @@ body { line-height: 24px; vertical-align: middle; font-size: 14px; - color: #666; + color: #757575; } -.test_table .succeeded .teststatus { color: #090; /* green */ background: #cfc; } -.test_table .failed .teststatus { color: #900; /* red */ background: #fcc; } +.test_table .succeeded .teststatus { color: #090; /* green */ background: black; } +.test_table .failed .teststatus { color: #900; /* red */ background: black; } .test_table .running .teststatus { color: #ccc; } .test_table .event .expected_fail { color: #600; } From 39b66f0d1ee0ebdae4667c479861a4baeb912351 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 09:53:55 -0300 Subject: [PATCH 275/292] Meteor installer to 2.9.0 :commet: --- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..fcae57bcec 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.9.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 8afbd9c39e..53d344ef33 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.2", + "version": "2.9.0", "description": "Install Meteor", "main": "install.js", "scripts": { From 5d19fec09b195d3c3bfea8559ed039c10d253de7 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 09:53:19 -0400 Subject: [PATCH 276/292] Revert "Merge pull request #12273 from meteor/release-2.9" This reverts commit 19e9e2082ebdaa8dffa713e89a72790ef8bc731a, reversing changes made to 644592cedc70b1a7399bb9be214a4eb0ed598663. --- .circleci/config.yml | 64 +- .travis.yml | 14 +- docs/history.md | 119 +- docs/source/api/email.md | 22 - docs/source/commandline.md | 393 +- guide/_config.yml | 3 +- guide/source/2.9-migration.md | 102 - meteor | 2 +- .../eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 +- npm-packages/meteor-babel/options.js | 18 +- npm-packages/meteor-babel/package-lock.json | 3880 +---------------- npm-packages/meteor-babel/package.json | 6 +- npm-packages/meteor-babel/runtime.js | 24 +- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- packages/accounts-base/accounts_client.js | 5 - .../accounts-base/accounts_client_tests.js | 48 +- packages/accounts-base/accounts_common.js | 59 +- packages/accounts-base/accounts_server.js | 101 +- packages/accounts-base/accounts_tests.js | 56 - packages/accounts-base/package.js | 6 +- packages/accounts-oauth/oauth_common.js | 55 - packages/accounts-oauth/oauth_server.js | 43 - packages/accounts-oauth/package.js | 7 +- packages/accounts-password/package.js | 2 +- packages/accounts-password/password_client.js | 2 + packages/accounts-password/password_server.js | 113 +- packages/accounts-password/password_tests.js | 4 +- .../.npm/package/npm-shrinkwrap.json | 746 ++-- packages/babel-compiler/package.js | 4 +- packages/ecmascript/package.js | 2 +- packages/email/email.js | 133 +- packages/email/email_test_helpers.js | 21 - packages/email/email_tests.js | 582 +-- packages/email/email_tests_data.js | 254 -- packages/email/package.js | 2 +- packages/facebook-oauth/facebook_server.js | 137 +- packages/facebook-oauth/package.js | 3 +- packages/github-oauth/github_server.js | 29 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/google_server.js | 163 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/meetup_server.js | 83 +- packages/meetup-oauth/package.js | 3 +- .../meteor_developer_server.js | 126 +- packages/meteor-developer-oauth/package.js | 3 +- packages/meteor-tool/package.js | 2 +- packages/meteor/asl-helpers.js | 22 - packages/meteor/helpers.js | 34 +- packages/meteor/meteor.d.ts | 18 +- packages/meteor/package.js | 5 +- packages/minifier-css/minifier-async-tests.js | 51 - packages/minifier-css/minifier.js | 32 +- packages/minifier-css/package.js | 3 +- packages/minimongo/cursor.js | 6 +- packages/minimongo/local_collection.js | 8 - packages/minimongo/package.js | 2 +- packages/mongo/collection.js | 27 - packages/mongo/collection_async_tests.js | 11 - packages/mongo/mongo_driver.js | 12 - packages/mongo/oplog_v2_converter.js | 6 +- packages/mongo/oplog_v2_converter_tests.js | 65 - packages/mongo/package.js | 2 +- packages/mongo/remote_collection_driver.js | 21 +- .../.npm/package/npm-shrinkwrap.json | 374 +- packages/npm-mongo/package.js | 4 +- packages/oauth/oauth_server.js | 32 +- packages/oauth/package.js | 3 +- packages/oauth1/oauth1_binding.js | 92 +- packages/oauth1/oauth1_server.js | 10 +- packages/oauth1/oauth1_tests.js | 22 +- packages/oauth1/package.js | 7 +- packages/oauth2/oauth2_server.js | 4 +- packages/oauth2/oauth2_tests.js | 16 +- packages/oauth2/package.js | 2 +- .../package-version-parser-tests.js | 4 +- packages/package-version-parser/package.js | 5 +- packages/promise/package.js | 2 +- packages/promise/server.js | 14 +- packages/standard-minifier-css/package.js | 2 +- .../plugin/minify-css.js | 2 +- packages/test-helpers/async_multi.js | 30 +- packages/test-helpers/package.js | 5 +- packages/test-in-browser/driver.js | 4 +- packages/test-in-browser/package.js | 2 +- packages/test-in-console/puppeteerRunner.js | 32 +- packages/tinytest/package.js | 2 +- packages/tinytest/tinytest.js | 153 +- packages/tinytest/tinytest_server.js | 4 +- packages/twitter-oauth/package.js | 2 +- packages/twitter-oauth/twitter_server.js | 6 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 3 +- packages/weibo-oauth/weibo_server.js | 82 +- .../admin/meteor-release-experimental.json | 2 +- scripts/admin/meteor-release-official.json | 2 +- scripts/dev-bundle-tool-package.js | 2 +- tools/cli/commands-packages.js | 2 +- tools/cli/commands.js | 328 +- tools/cli/help.txt | 34 +- tools/console/console.js | 15 - tools/packaging/package-client.js | 1 + tools/static-assets/README.md | 8 - .../static-assets/scaffolds-js/collection.js | 3 - tools/static-assets/scaffolds-js/index.js | 3 - tools/static-assets/scaffolds-js/methods.js | 29 - .../scaffolds-js/publications.js | 6 - .../static-assets/scaffolds-ts/collection.ts | 9 - tools/static-assets/scaffolds-ts/index.ts | 3 - tools/static-assets/scaffolds-ts/methods.ts | 30 - .../scaffolds-ts/publications.ts | 6 - .../skel-apollo/.meteor/packages | 2 +- .../static-assets/skel-bare/.meteor/packages | 2 +- .../static-assets/skel-blaze/.meteor/packages | 3 +- .../skel-chakra-ui/.meteor/packages | 3 +- .../static-assets/skel-full/.meteor/packages | 1 - .../skel-minimal/.meteor/packages | 1 - .../static-assets/skel-react/.meteor/packages | 3 +- .../static-assets/skel-solid/.meteor/packages | 3 +- .../skel-svelte/.meteor/packages | 3 +- .../skel-tailwind/.meteor/packages | 3 +- .../skel-typescript/.meteor/packages | 3 +- .../skel-typescript/package.json | 2 +- tools/static-assets/skel-vue-2/.gitignore | 1 - .../skel-vue-2/.meteor/.gitignore | 1 - .../static-assets/skel-vue-2/.meteor/packages | 24 - .../skel-vue-2/.meteor/platforms | 2 - .../static-assets/skel-vue-2/client/main.html | 7 - tools/static-assets/skel-vue-2/client/main.js | 12 - .../skel-vue-2/imports/ui/App.vue | 26 - tools/static-assets/skel-vue-2/package.json | 23 - tools/static-assets/skel-vue-2/server/main.js | 3 - tools/static-assets/skel-vue-2/tests/main.js | 20 - .../skel-vue/.meteor/.finished-upgraders | 19 - tools/static-assets/skel-vue/.meteor/.id | 7 - tools/static-assets/skel-vue/.meteor/packages | 29 +- tools/static-assets/skel-vue/.meteor/release | 1 - tools/static-assets/skel-vue/.meteor/versions | 71 - tools/static-assets/skel-vue/README.md | 19 - tools/static-assets/skel-vue/client/main.css | 3 - tools/static-assets/skel-vue/client/main.html | 9 - tools/static-assets/skel-vue/client/main.js | 13 +- .../imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../imports/api/fixtures.js | 0 .../skel-vue/imports/api/links.js | 10 - .../imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../imports/api/methods/index.js | 0 .../imports/api/publications/index.js | 0 .../imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 .../skel-vue/imports/ui/About.vue | 5 - .../static-assets/skel-vue/imports/ui/App.vue | 30 +- .../skel-vue/imports/ui/AppMenu.vue | 6 - .../skel-vue/imports/ui/Hello.vue | 16 - .../skel-vue/imports/ui/Home.vue | 10 - .../skel-vue/imports/ui/Info.vue | 16 - .../imports/ui/components/Hello.vue | 0 .../imports/ui/components/Info.vue | 0 .../static-assets/skel-vue/imports/ui/main.js | 13 - .../imports/ui/plugins.js | 0 .../skel-vue/imports/ui/router.js | 18 - tools/static-assets/skel-vue/package.json | 14 +- .../static-assets/skel-vue/postcss.config.js | 6 - tools/static-assets/skel-vue/server/main.js | 34 +- .../static-assets/skel-vue/tailwind.config.js | 8 - tools/static-assets/skel-vue/tests/main.js | 26 +- tools/static-assets/skel-vue/vite.config.js | 12 - tools/tsconfig.json | 3 +- 171 files changed, 1748 insertions(+), 7983 deletions(-) delete mode 100644 guide/source/2.9-migration.md delete mode 100644 packages/email/email_test_helpers.js delete mode 100644 packages/email/email_tests_data.js delete mode 100644 packages/meteor/asl-helpers.js delete mode 100644 packages/minifier-css/minifier-async-tests.js delete mode 100644 tools/static-assets/scaffolds-js/collection.js delete mode 100644 tools/static-assets/scaffolds-js/index.js delete mode 100644 tools/static-assets/scaffolds-js/methods.js delete mode 100644 tools/static-assets/scaffolds-js/publications.js delete mode 100644 tools/static-assets/scaffolds-ts/collection.ts delete mode 100644 tools/static-assets/scaffolds-ts/index.ts delete mode 100644 tools/static-assets/scaffolds-ts/methods.ts delete mode 100644 tools/static-assets/scaffolds-ts/publications.ts delete mode 100644 tools/static-assets/skel-vue-2/.gitignore delete mode 100644 tools/static-assets/skel-vue-2/.meteor/.gitignore delete mode 100644 tools/static-assets/skel-vue-2/.meteor/packages delete mode 100644 tools/static-assets/skel-vue-2/.meteor/platforms delete mode 100644 tools/static-assets/skel-vue-2/client/main.html delete mode 100644 tools/static-assets/skel-vue-2/client/main.js delete mode 100644 tools/static-assets/skel-vue-2/imports/ui/App.vue delete mode 100644 tools/static-assets/skel-vue-2/package.json delete mode 100644 tools/static-assets/skel-vue-2/server/main.js delete mode 100644 tools/static-assets/skel-vue-2/tests/main.js delete mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders delete mode 100644 tools/static-assets/skel-vue/.meteor/.id delete mode 100644 tools/static-assets/skel-vue/.meteor/release delete mode 100644 tools/static-assets/skel-vue/.meteor/versions delete mode 100644 tools/static-assets/skel-vue/README.md delete mode 100644 tools/static-assets/skel-vue/client/main.css rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/fixtures.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/api/links.js rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/api/publications/links.tests.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue delete mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/components/Info.vue (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/main.js rename tools/static-assets/{skel-vue-2 => skel-vue}/imports/ui/plugins.js (100%) delete mode 100644 tools/static-assets/skel-vue/imports/ui/router.js delete mode 100644 tools/static-assets/skel-vue/postcss.config.js delete mode 100644 tools/static-assets/skel-vue/tailwind.config.js delete mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 8dfa556f94..e8e1b5e52f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2.1 +version: 2 # A reusable "run" snippet which is ran before each test to setup the # environment for user-limits, core-dumps, etc. @@ -96,30 +96,6 @@ build_machine_environment: &build_machine_environment NUM_GROUPS: 12 RUNNING_AVG_LENGTH: 6 -can_disable_fibers: &can_disable_fibers - parameters: - fibers: - type: boolean - default: true - -set_fibers_env: &set_fibers_env - name: "Disable Fibers" - command: | - if [ "<< parameters.fibers >>" == "false" ]; then - echo "Disabling Fibers" - echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV" - source "$BASH_ENV" - fi - - -# Run tests with Fibers and then without. -matrix_for_fibers: &matrix_for_fibers - matrix: - parameters: - # If we want to run with Fibers and without, just append false here. - fibers: [true] - - jobs: Get Ready: <<: *build_machine_environment @@ -191,7 +167,6 @@ jobs: path: /tmp/memuse.txt Isolated Tests: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -200,7 +175,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -235,7 +209,6 @@ jobs: path: /tmp/memuse.txt Test Group 0: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -244,7 +217,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -277,7 +249,6 @@ jobs: path: /tmp/memuse.txt Test Group 1: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -286,7 +257,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -319,7 +289,6 @@ jobs: path: /tmp/memuse.txt Test Group 2: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -328,7 +297,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -361,7 +329,6 @@ jobs: path: /tmp/memuse.txt Test Group 3: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -370,7 +337,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -403,7 +369,6 @@ jobs: path: /tmp/memuse.txt Test Group 4: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -412,7 +377,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -445,7 +409,6 @@ jobs: path: /tmp/memuse.txt Test Group 5: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -454,7 +417,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -487,7 +449,6 @@ jobs: path: /tmp/memuse.txt Test Group 6: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -496,7 +457,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -529,7 +489,6 @@ jobs: path: /tmp/memuse.txt Test Group 7: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -538,7 +497,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -571,7 +529,6 @@ jobs: path: /tmp/memuse.txt Test Group 8: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -580,7 +537,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -613,7 +569,6 @@ jobs: path: /tmp/memuse.txt Test Group 9: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -622,7 +577,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -655,7 +609,6 @@ jobs: path: /tmp/memuse.txt Test Group 10: - <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -664,7 +617,6 @@ jobs: <<: *run_env_change - attach_workspace: at: . - - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -775,7 +727,6 @@ jobs: npm test Clean Up: - <<: *can_disable_fibers <<: *build_machine_environment steps: - attach_workspace: @@ -858,58 +809,45 @@ workflows: - Docs - Get Ready - Isolated Tests: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 0: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 1: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 2: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 3: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 4: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 5: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 6: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 7: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 8: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 9: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 10: - <<: *matrix_for_fibers requires: - Get Ready - Test Group 11: requires: - Get Ready - Clean Up: - <<: *matrix_for_fibers requires: - Isolated Tests - Test Group 0 diff --git a/.travis.yml b/.travis.yml index 35e4e9f859..2d4a4a74d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,17 +8,13 @@ cache: - ".meteor" - ".babel-cache" script: + - export phantom=false + # to skip Downloading Chromium on every run + # https://github.com/dfernandez79/puppeteer/blob/main/README.md#q-chromium-gets-downloaded-on-every-npm-ci-run-how-can-i-cache-the-download + - export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - travis_retry ./packages/test-in-console/run.sh env: - global: - - CXX=g++-4.8 - - phantom=false - - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - jobs: - # We don't want to run the tests without fibers anymore. - # - DISABLE_FIBERS=1 - # Use a different flag, since node would use false as a string. - - FIBERS_ENABLED=1 + - CXX=g++-4.8 addons: apt: sources: diff --git a/docs/history.md b/docs/history.md index 346edbfca1..d8e5806060 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,104 +1,3 @@ -## 2.9, 2022-XX-XX - -### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) -* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) -* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) -* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) -* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) -* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) -* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) -* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) -* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) -* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) -* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) -* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) -* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) - - -#### Breaking Changes - -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` - - -#### Migration Steps - -#### Meteor Version Release - -* `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel -* `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel -* `accounts-base@2.2.6` - - Moved some functions to accounts-oauth. -* `accounts-oauth@1.4.2` - - Received functions from accounts-base. -* `accounts-password@2.3.2` - - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` -* `babel-compiler@7.10.1` - - Updated babel to 7.17.1. -* `email@2.2.3` - - Create Email.sendAsync method without using Fibers. -* `facebook-oauth@1.11.2` - - Updated facebook-oauth to use async functions. -* `github-oauth@1.4.1` - - Updated github-oauth to use async functions. -* `google-oauth@1.4.3` - - Updated google-oauth to use async functions. -* `meetup-oauth@1.1.2` - - Updated meetup-oauth to use async functions. -* `meteor-developer-oauth@1.3.2` - - Updated meteor-developer-oauth to use async functions. -* `meteor@1.10.3` - - Added Async Local Storage helpers. -* `minifier-css@1.6.2` - - Asyncfied `minifyCss` function. -* `minimongo@1.9.1` - - Implemented Fibers-less MongoDB count methods. -* `mongo@1.16.2` - - Implemented Fibers-less MongoDB count methods. -* `npm-mongo@4.12.1` - - Updated npm-mongo to 4.12. -* `oauth@2.1.3` - - Asyncfied methods. -* `oauth1@1.5.1` - - Asyncfied methods. -* `oauth2@1.3.2` - - Asyncfied methods. -* `package-version-parser@3.2.1` - - Removed underscore. -* `promise@0.12.2` - - Added DISABLE_FIBERS flag. -* `standard-minifier-css@1.8.3` - - Asyncfied minify method. -* `test-helpers@1.3.1` - - added runAndThrowIfNeeded function. -* `test-in-browser@1.3.2` - - Adjusted e[type] to e.type -* `tinytest@1.2.2` - - TinyTest package without Future -* `twitter-oauth@1.3.2` - - Asyncfied methods. -* `typescript@4.6.4` - - updated typescript to 4.6.4. -* `weibo-oauth@1.3.2` - - Asyncfied methods. - -#### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@edimarlnx](https://github.com/edimarlnx) -- [@matheusccastroo](https://github.com/matheusccastroo) -- [@Grubba27](https://github.com/Grubba27) -- [@StorytellerCZ](https://github.com/StorytellerCZ) -- [@radekmie](https://github.com/radekmie) -- [@piotrpospiech](https://github.com/piotrpospiech) -- [@harryadel](https://github.com/harryadel) - -For making this great framework even better! - - ## v2.8.2, 2022-11-29 #### Highlights @@ -116,6 +15,9 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). +* `meteorjs/babel@7.16.1-beta.0` + - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) @@ -124,7 +26,6 @@ N/A For making this great framework even better! - ## 2.8.1, 2022-11-14 #### Highlights @@ -231,7 +132,7 @@ _In case you want types in your app using the core packages types/zodern:types ( * `test-in-browser@1.3.1` - removed underscore. * `tracker@1.2.1` -- added types for package. + - added types for package. * `twitter-oauth@1.3.1` - removed underscore. * `underscore@1.0.11` @@ -240,6 +141,7 @@ _In case you want types in your app using the core packages types/zodern:types ( - added types for package. * `webapp-hashing@1.1.1` - added types for package. + ## v2.8, 2022-10-19 #### Highlights @@ -282,16 +184,7 @@ Read our [Migration Guide](https://guide.meteor.com/2.8-migration.html) for this - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). -* `@meteorjs/babel@7.17.0` - - Upgrade TypeScript to `4.6.4` -* `babel-compiler@7.10.0` - - Upgrade TypeScript to `4.6.4` -* `ecmascript@0.16.3` - - Upgrade TypeScript to `4.6.4` -* `typescript@4.6.4` - - Upgrade TypeScript to `4.6.4` -* `eslint-plugin-meteor@7.4.0` - - Upgrade TypeScript to `4.6.4` + #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 95ef8d6578..77ea6edf24 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -82,28 +82,6 @@ Meteor.call( 'This is a test of Email.send.' ); ``` -{% apibox "Email.sendAsync" %} - -`sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. -If you defined `Email.customTransport`, the `callAsync` method returns the return value from the `customTransport` method or a Promise, if this method is async. - -```js -// Server: Define a method that the client can call. -Meteor.methods({ - sendEmail(to, from, subject, text) { - // Make sure that all arguments are strings. - check([to, from, subject, text], [String]); - - // Let other method calls from the same client start running, without - // waiting for the email sending to complete. - this.unblock(); - - return Email.sendAsync({ to, from, subject, text }).catch(err => { - // - }); - } -}); -``` {% apibox "Email.hookSend" %} diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ebb9381d3a..ae79273d84 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,19 +129,7 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic [Vue 3](https://vuejs.org/) app. - -`--react` - -Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) -for more information. This is the default. - -`--angular` -for more information. - -`--vue-2` - -Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) +Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) for more information. `--svelte` @@ -158,350 +146,43 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [Solid](https://www.solidjs.com/) app. +Create a basic [solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | -| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | - -

meteor generate

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

collection.js

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

methods.js

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

publication.js

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

index.js

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

path option

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

collection.ts

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

methods.ts

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

publications.ts

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

index.ts

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

Using the Wizard

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

Using your own template

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

How to rename things?

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

How to bring your own templates?

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

meteor login / logout

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

Why is this new API important?

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

Why doing this change now?

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

Can I update to this version without changing my app?

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

What's new?

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

New async methods

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

Accounts-base without service-configuration

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

Migrating from a version older than 2.8?

- -If you're migrating from a version of Meteor older than Meteor 2.8, there may be important considerations not listed in this guide. Please review the older migration guides for details: - -* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7) -* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6) -* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5) -* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4) -* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3) -* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2) -* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0) -* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12) -* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11) -* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2) -* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10) -* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3) -* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9) -* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3) -* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2) -* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8) -* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7) -* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6) -* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5) -* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4) -* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3) -* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2) diff --git a/meteor b/meteor index e1379039a5..0779da7ba2 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.2 +BUNDLE_VERSION=14.21.1.0 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 7845d884a3..6f01831721 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.4.0", + "version": "7.3.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index de71198d42..ddab44b16d 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.6.4", - "@meteorjs/babel": "7.17.1-beta.0", + typescript: "4.5.4", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index dc215572b8..21a9be7dde 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,7 +80,11 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push(require("@babel/preset-react")); + options.presets.push( + [require("@babel/preset-react"), { + runtime: "automatic" + }] + ); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true @@ -185,13 +189,11 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - if (!process.env.DISABLE_FIBERS) { - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); - } + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: false + }]); // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 17c5612fb7..7fec2af89a 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,3875 +1,8 @@ { "name": "@meteorjs/babel", - "version": "7.17.2-beta.0", - "lockfileVersion": 2, + "version": "7.16.0-beta.1", + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@meteorjs/babel", - "version": "7.17.2-beta.0", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-react": "^7.16.7", - "@babel/runtime": "7.17.2", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "@meteorjs/reify": "0.23.0", - "babel-preset-meteor": "^7.10.0", - "babel-preset-minify": "^0.5.1", - "convert-source-map": "^1.6.0", - "lodash": "^4.17.21", - "meteor-babel-helpers": "0.0.3", - "typescript": "~4.6.4" - }, - "devDependencies": { - "@babel/plugin-proposal-decorators": "7.14.5", - "@babel/plugin-syntax-decorators": "7.14.5", - "d3": "4.13.0", - "fibers": "5.0.0", - "meteor-promise": "0.9.0", - "mocha": "6.2.3", - "promise": "8.1.0", - "source-map": "0.6.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", - "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", - "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", - "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", - "dependencies": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@babel/core/node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/@babel/core/node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" - }, - "node_modules/@babel/core/node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "node_modules/@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", - "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.7", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", - "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", - "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", - "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", - "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@meteorjs/reify": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", - "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", - "dependencies": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "magic-string": "^0.25.3", - "periscopic": "^2.0.3", - "semver": "^5.7.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@meteorjs/reify/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "node_modules/babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "node_modules/babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "node_modules/babel-helper-is-nodes-equiv": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" - }, - "node_modules/babel-helper-is-void-0": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" - }, - "node_modules/babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "node_modules/babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "node_modules/babel-helper-to-multiple-sequence-expressions": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", - "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-minify-builtins": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", - "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" - }, - "node_modules/babel-plugin-minify-constant-folding": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", - "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "node_modules/babel-plugin-minify-flip-comparisons": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-infinity": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" - }, - "node_modules/babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", - "dependencies": { - "babel-helper-mark-eval-scopes": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-numeric-literals": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" - }, - "node_modules/babel-plugin-minify-replace": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", - "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" - }, - "node_modules/babel-plugin-minify-simplify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", - "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3", - "babel-helper-is-nodes-equiv": "^0.0.1", - "babel-helper-to-multiple-sequence-expressions": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-type-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-transform-inline-consecutive-adds": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" - }, - "node_modules/babel-plugin-transform-member-expression-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" - }, - "node_modules/babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" - }, - "node_modules/babel-plugin-transform-minify-booleans": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" - }, - "node_modules/babel-plugin-transform-property-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", - "dependencies": { - "esutils": "^2.0.2" - } - }, - "node_modules/babel-plugin-transform-regexp-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" - }, - "node_modules/babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" - }, - "node_modules/babel-plugin-transform-remove-debugger": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" - }, - "node_modules/babel-plugin-transform-remove-undefined": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", - "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-transform-simplify-comparison-operators": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" - }, - "node_modules/babel-plugin-transform-undefined-to-void": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" - }, - "node_modules/babel-preset-meteor": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", - "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", - "dependencies": { - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.13.16", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13" - } - }, - "node_modules/babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", - "dependencies": { - "babel-plugin-minify-builtins": "^0.5.0", - "babel-plugin-minify-constant-folding": "^0.5.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-flip-comparisons": "^0.4.3", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-minify-infinity": "^0.4.3", - "babel-plugin-minify-mangle-names": "^0.5.0", - "babel-plugin-minify-numeric-literals": "^0.4.3", - "babel-plugin-minify-replace": "^0.5.0", - "babel-plugin-minify-simplify": "^0.5.1", - "babel-plugin-minify-type-constructors": "^0.4.3", - "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", - "babel-plugin-transform-member-expression-literals": "^6.9.4", - "babel-plugin-transform-merge-sibling-variables": "^6.9.4", - "babel-plugin-transform-minify-booleans": "^6.9.4", - "babel-plugin-transform-property-literals": "^6.9.4", - "babel-plugin-transform-regexp-constructors": "^0.4.3", - "babel-plugin-transform-remove-console": "^6.9.4", - "babel-plugin-transform-remove-debugger": "^6.9.4", - "babel-plugin-transform-remove-undefined": "^0.5.0", - "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", - "babel-plugin-transform-undefined-to-void": "^6.9.4", - "lodash": "^4.17.11" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001248", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", - "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-js-compat": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", - "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/core-js-compat/node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/core-js-compat/node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" - }, - "node_modules/core-js-compat/node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/d3": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", - "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", - "dev": true, - "dependencies": { - "d3-array": "1.2.1", - "d3-axis": "1.0.8", - "d3-brush": "1.0.4", - "d3-chord": "1.0.4", - "d3-collection": "1.0.4", - "d3-color": "1.0.3", - "d3-dispatch": "1.0.3", - "d3-drag": "1.2.1", - "d3-dsv": "1.0.8", - "d3-ease": "1.0.3", - "d3-force": "1.1.0", - "d3-format": "1.2.2", - "d3-geo": "1.9.1", - "d3-hierarchy": "1.1.5", - "d3-interpolate": "1.1.6", - "d3-path": "1.0.5", - "d3-polygon": "1.0.3", - "d3-quadtree": "1.0.3", - "d3-queue": "3.0.7", - "d3-random": "1.1.0", - "d3-request": "1.0.6", - "d3-scale": "1.0.7", - "d3-selection": "1.3.0", - "d3-shape": "1.2.0", - "d3-time": "1.0.8", - "d3-time-format": "2.1.1", - "d3-timer": "1.0.7", - "d3-transition": "1.1.1", - "d3-voronoi": "1.1.2", - "d3-zoom": "1.7.1" - } - }, - "node_modules/d3-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", - "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", - "dev": true - }, - "node_modules/d3-axis": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", - "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", - "dev": true - }, - "node_modules/d3-brush": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", - "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/d3-chord": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", - "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", - "dev": true, - "dependencies": { - "d3-array": "1", - "d3-path": "1" - } - }, - "node_modules/d3-collection": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", - "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", - "dev": true - }, - "node_modules/d3-color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", - "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", - "dev": true - }, - "node_modules/d3-dispatch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", - "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", - "dev": true - }, - "node_modules/d3-drag": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", - "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "node_modules/d3-dsv": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", - "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", - "dev": true, - "dependencies": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json", - "csv2tsv": "bin/dsv2dsv", - "dsv2dsv": "bin/dsv2dsv", - "dsv2json": "bin/dsv2json", - "json2csv": "bin/json2dsv", - "json2dsv": "bin/json2dsv", - "json2tsv": "bin/json2dsv", - "tsv2csv": "bin/dsv2dsv", - "tsv2json": "bin/dsv2json" - } - }, - "node_modules/d3-ease": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", - "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", - "dev": true - }, - "node_modules/d3-force": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", - "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", - "dev": true, - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "node_modules/d3-format": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", - "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", - "dev": true - }, - "node_modules/d3-geo": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", - "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", - "dev": true, - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-hierarchy": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", - "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", - "dev": true - }, - "node_modules/d3-interpolate": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", - "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", - "dev": true, - "dependencies": { - "d3-color": "1" - } - }, - "node_modules/d3-path": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", - "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", - "dev": true - }, - "node_modules/d3-polygon": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", - "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", - "dev": true - }, - "node_modules/d3-quadtree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", - "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", - "dev": true - }, - "node_modules/d3-queue": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", - "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", - "dev": true - }, - "node_modules/d3-random": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", - "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", - "dev": true - }, - "node_modules/d3-request": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", - "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", - "dev": true, - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-dsv": "1", - "xmlhttprequest": "1" - } - }, - "node_modules/d3-scale": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", - "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", - "dev": true, - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-color": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "node_modules/d3-selection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", - "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", - "dev": true - }, - "node_modules/d3-shape": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", - "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", - "dev": true, - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-time": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", - "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", - "dev": true - }, - "node_modules/d3-time-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", - "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", - "dev": true, - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/d3-timer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", - "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", - "dev": true - }, - "node_modules/d3-transition": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", - "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", - "dev": true, - "dependencies": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", - "dev": true - }, - "node_modules/d3-zoom": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", - "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", - "dev": true, - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.793", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", - "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fibers": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", - "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/meteor-babel-helpers": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" - }, - "node_modules/meteor-promise": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", - "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/periscopic": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", - "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", - "dependencies": { - "estree-walker": "^2.0.2", - "is-reference": "^1.1.4" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -4940,8 +1073,7 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "requires": {} + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" }, "ansi-colors": { "version": "3.2.3", @@ -6590,9 +2722,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" }, "unbox-primitive": { "version": "1.0.1", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 6733ac41b8..c5c361f366 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.2-beta.0", + "version": "7.16.1-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -37,7 +37,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-react": "^7.16.7", - "@babel/runtime": "7.17.2", + "@babel/runtime": "^7.17.2", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0", @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "~4.6.4" + "typescript": "^4.5.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/npm-packages/meteor-babel/runtime.js b/npm-packages/meteor-babel/runtime.js index c7fe580b3f..43b5c85c85 100644 --- a/npm-packages/meteor-babel/runtime.js +++ b/npm-packages/meteor-babel/runtime.js @@ -11,21 +11,19 @@ Module.prototype.resolve = function (id) { require("@meteorjs/reify/lib/runtime").enable(Module.prototype); -if (!process.env.DISABLE_FIBERS) { - require("meteor-promise").makeCompatible( - global.Promise = global.Promise || - require("promise/lib/es6-extensions"), - require("fibers") - ); +require("meteor-promise").makeCompatible( + global.Promise = global.Promise || + require("promise/lib/es6-extensions"), + require("fibers") +); // If Promise.asyncApply is defined, use it to wrap calls to // regeneratorRuntime.async so that the entire async function will run in // its own Fiber, not just the code that comes after the first await. - if (typeof Promise.asyncApply === "function") { - var regeneratorRuntime = require("@babel/runtime/regenerator"); - var realAsync = regeneratorRuntime.async; - regeneratorRuntime.async = function (innerFn) { - return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); - }; - } +if (typeof Promise.asyncApply === "function") { + var regeneratorRuntime = require("@babel/runtime/regenerator"); + var realAsync = regeneratorRuntime.async; + regeneratorRuntime.async = function (innerFn) { + return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); + }; } diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index fcae57bcec..676cf07665 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.9.0'; +const METEOR_LATEST_VERSION = '2.8.1'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 53d344ef33..8afbd9c39e 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.9.0", + "version": "2.8.2", "description": "Install Meteor", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index 842e927ad9..cfded81faa 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,11 +798,6 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); - // TODO: the code above needs to be changed to Meteor.userAsync() when we have - // a way to make it reactive using async. - // Template.registerHelper('currentUserAsync', - // async () => await Meteor.userAsync()); - /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 880a71e4fe..9ebb7d4b9f 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,20 +94,6 @@ Tinytest.addAsync( } ); -Tinytest.addAsync( - 'accounts async - Meteor.loggingIn() is false after login has completed', - (test, done) => { - logoutAndCreateUser(test, done, () => { - // Login then verify loggingIn is false after login has completed - Meteor.loginWithPassword(username, password, async () => { - test.isFalse(Meteor.loggingIn()); - test.isTrue(await Meteor.userAsync()); - removeTestUser(done); - }); - }); - } -); - Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -164,7 +150,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user() obeys explicit and default field selectors', + 'accounts - Meteor.user obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -192,38 +178,6 @@ Tinytest.addAsync( } ); -Tinytest.addAsync( - 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', - (test, done) => { - logoutAndCreateUser(test, done, () => { - Meteor.loginWithPassword(username, password, async () => { - // by default, all fields should be returned - let user; - user = await Meteor.userAsync(); - test.equal(user.profile[excludeField], excludeValue); - - // this time we want to exclude the default fields - const options = Accounts._options; - Accounts._options = {}; - Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); - - user = await Meteor.userAsync(); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile[excludeField], excludeValue); - test.equal(user.profile.name, username); - - // this time we only want certain fields... - - user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); - test.isUndefined(user.profile[excludeField]); - test.isUndefined(user.profile[defaultExcludeField]); - test.equal(user.profile.name, username); - Accounts._options = options; - removeTestUser(done); - }); - }); - } -); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index edca3cd31b..b94e927a2d 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,6 +79,40 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; + + // loginServiceConfiguration and ConfigError are maintained for backwards compatibility + Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + this.loginServiceConfiguration = ServiceConfiguration.configurations; + this.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + if (!VALID_CONFIG_KEYS.includes(key)) { + // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? + throw new Meteor.Error( + `Accounts configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + this._options[key] = settings[key]; + } + }); + } + }); } /** @@ -136,18 +170,6 @@ export class AccountsCommon { : null; } - /** - * @summary Get the current user record, or `null` if no user is logged in. - * @locus Anywhere - * @param {Object} [options] - * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. - */ - async userAsync(options) { - const userId = this.userId(); - return userId - ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) - : null; - } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -242,7 +264,6 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { if (!VALID_CONFIG_KEYS.includes(key)) { - // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? throw new Meteor.Error(`Accounts.config: Invalid key: ${key}`); } }); @@ -397,15 +418,6 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); -/** - * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. - * @locus Anywhere but publish functions - * @importFromPackage meteor - * @param {Object} [options] - * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. - */ -Meteor.userAsync = options => Accounts.userAsync(options); - // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires @@ -418,6 +430,9 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes +// how long we wait before logging out clients when Meteor.logoutOtherClients is +// called +export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 2fd0a6d41b..f677baa34c 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,5 +1,4 @@ import crypto from 'crypto'; -import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -435,7 +434,7 @@ export class AccountsServer extends AccountsCommon { // If the login is allowed and isn't aborted by a validate login hook // callback, log in the user. // - async _attemptLogin( + _attemptLogin( methodInvocation, methodName, methodArgs, @@ -495,18 +494,18 @@ export class AccountsServer extends AccountsCommon { // Ensure that thrown exceptions are caught and that login hook // callbacks are still called. // - async _loginMethod( + _loginMethod( methodInvocation, methodName, methodArgs, type, fn ) { - return await this._attemptLogin( + return this._attemptLogin( methodInvocation, methodName, methodArgs, - await tryLoginMethod(type, fn) + tryLoginMethod(type, fn) ); }; @@ -583,10 +582,11 @@ export class AccountsServer extends AccountsCommon { // Try all of the registered login handlers until one of them doesn't // return `undefined`, meaning it handled this call to `login`. Return // that return value. - async _runLoginHandlers(methodInvocation, options) { + _runLoginHandlers(methodInvocation, options) { for (let handler of this._loginHandlers) { - const result = await tryLoginMethod(handler.name, async () => - await handler.handler.call(methodInvocation, options) + const result = tryLoginMethod( + handler.name, + () => handler.handler.call(methodInvocation, options) ); if (result) { @@ -594,10 +594,7 @@ export class AccountsServer extends AccountsCommon { } if (result !== undefined) { - throw new Meteor.Error( - 400, - 'A login handler should return a result or undefined' - ); + throw new Meteor.Error(400, "A login handler should return a result or undefined"); } } @@ -642,15 +639,14 @@ export class AccountsServer extends AccountsCommon { // If successful, returns {token: reconnectToken, id: userId} // If unsuccessful (for example, if the user closed the oauth login popup), // throws an error describing the reason - methods.login = async function (options) { + methods.login = function (options) { // Login handlers should really also check whatever field they look at in // options, but we don't enforce it. check(options, Object); - const result = await accounts._runLoginHandlers(this, options); - //console.log({result}); + const result = accounts._runLoginHandlers(this, options); - return await accounts._attemptLogin(this, "login", arguments, result); + return accounts._attemptLogin(this, "login", arguments, result); }; methods.logout = function () { @@ -725,19 +721,14 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - if (Package['service-configuration']) { - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (Package["oauth-encryption"]) { - const { OAuthEncryption } = Package["oauth-encryption"] - if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) - options.secret = OAuthEncryption.seal(options.secret); - } + if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) + options.secret = OAuthEncryption.seal(options.secret); - ServiceConfiguration.configurations.insert(options); - } + ServiceConfiguration.configurations.insert(options); }; accounts._server.methods(methods); @@ -762,10 +753,8 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - if (Package['service-configuration']) { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); - } + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1518,10 +1507,10 @@ const cloneAttemptWithConnection = (connection, attempt) => { return clonedAttempt; }; -const tryLoginMethod = async (type, fn) => { +const tryLoginMethod = (type, fn) => { let result; try { - result = await fn(); + result = fn(); } catch (e) { result = {error: e}; @@ -1690,7 +1679,17 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = + Package["oauth-encryption"] && + Package["oauth-encryption"].OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption && OAuthEncryption.keyIsLoaded(); +}; // OAuth service data is temporarily stored in the pending credentials // collection during the oauth authentication process. Sensitive data @@ -1702,12 +1701,44 @@ const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; const pinEncryptedFieldsToUser = (serviceData, userId) => { Object.keys(serviceData).forEach(key => { let value = serviceData[key]; - if (OAuthEncryption?.isSealed(value)) + if (OAuthEncryption && OAuthEncryption.isSealed(value)) value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); serviceData[key] = value; }); }; + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); + // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 797bd758f0..de870e0f81 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,62 +604,6 @@ Tinytest.add( } ); - -Tinytest.addAsync( - 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', - async test => { - const ignoreFieldName = "bigArray"; - const customField = "customField"; - const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); - const stampedToken = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, stampedToken); - const options = Accounts._options; - - // stub Meteor.userId() so it works outside methods and returns the correct user: - const origAccountsUserId = Accounts.userId; - Accounts.userId = () => userId; - - Accounts._options = {}; - - // test the field is included by default - let user = await Meteor.userAsync(); - test.isNotUndefined(user[ignoreFieldName], 'included by default'); - - // test the field is excluded - Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); - user = await Meteor.userAsync(); - test.isUndefined(user[ignoreFieldName], 'excluded'); - user = await Meteor.userAsync({}); - test.isUndefined(user[ignoreFieldName], 'excluded {}'); - - // test the field can still be retrieved if required - user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); - test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); - test.isUndefined(user.username, 'field can be retrieved username'); - - // test a combined negative field specifier - user = await Meteor.userAsync({ fields: { username: 0 } }); - test.isUndefined(user[ignoreFieldName], 'combined field selector'); - test.isUndefined(user.username, 'combined field selector username'); - - // test an explicit request for the full user object - user = await Meteor.userAsync({ fields: {} }); - test.isNotUndefined(user[ignoreFieldName], 'full selector'); - test.isNotUndefined(user.username, 'full selector username'); - - Accounts._options = {}; - - // Test that a custom field gets retrieved properly - Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); - user = await Meteor.userAsync(); - test.isNotUndefined(user[customField]); - test.isUndefined(user.username); - test.isUndefined(user[ignoreFieldName]); - - Accounts._options = options; - Accounts.userId = origAccountsUserId; - } -); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 61a19fd4ba..90f03e6b50 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.6', + version: '2.2.5', }); Package.onUse(api => { @@ -15,6 +15,10 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index bfb99b0a5d..e0e1a1ad48 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,24 +1,3 @@ -import { Meteor } from 'meteor/meteor'; - -// TODO get from account-base -// config option keys -const VALID_CONFIG_KEYS = [ - 'sendVerificationEmail', - 'forbidClientAccountCreation', - 'passwordEnrollTokenExpiration', - 'passwordEnrollTokenExpirationInDays', - 'restrictCreationByEmailDomain', - 'loginExpirationInDays', - 'loginExpiration', - 'passwordResetTokenExpirationInDays', - 'passwordResetTokenExpiration', - 'ambiguousErrorMessages', - 'bcryptRounds', - 'defaultFieldSelector', - 'loginTokenExpirationHours', - 'tokenSequenceLength', -]; - Accounts.oauth = {}; const services = {}; @@ -52,37 +31,3 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); - -// loginServiceConfiguration and ConfigError are maintained for backwards compatibility -Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; - Accounts.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - if (!VALID_CONFIG_KEYS.includes(key)) { - // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? - throw new Meteor.Error( - `Accounts configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - Accounts._options[key] = settings[key]; - } - }); - } -}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index f8d67eff25..c76b2e439b 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,5 +1,3 @@ -import { Meteor } from 'meteor/meteor'; - // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -57,44 +55,3 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); - -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption?.keyIsLoaded(); -}; - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index d26a1ff571..f20513769d 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.2", + version: "1.4.1", }); Package.onUse(api => { @@ -9,11 +9,6 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); - - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - api.use('oauth'); api.addFiles('oauth_common.js'); diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index 719191d8dc..c4f9cadbd3 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.2', + version: '2.3.1', }); Npm.depends({ diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 30d3b49450..5d1279782b 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,10 +7,12 @@ const reportError = (error, callback) => { } }; + const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; + Accounts.callLoginMethod({ methodArguments: [ { diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index c44be77f66..ea1236313c 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,5 +1,8 @@ -import { hash as bcryptHash, compare as bcryptCompare } from 'bcrypt'; -import { Accounts } from "meteor/accounts-base"; +import bcrypt from 'bcrypt' +import {Accounts} from "meteor/accounts-base"; + +const bcryptHash = Meteor.wrapAsync(bcrypt.hash); +const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); // Utility for grabbing user const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); @@ -45,9 +48,9 @@ const getPasswordString = password => { // SHA256 before bcrypt) or an object with properties `digest` and // `algorithm` (in which case we bcrypt `password.digest`). // -const hashPassword = async password => { +const hashPassword = password => { password = getPasswordString(password); - return await bcryptHash(password, Accounts._bcryptRounds()); + return bcryptHash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -71,7 +74,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -const checkPasswordAsync = async (user, password) => { +Accounts._checkPassword = (user, password) => { const result = { userId: user._id }; @@ -80,16 +83,15 @@ const checkPasswordAsync = async (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! await bcryptCompare(formattedPassword, hash)) { + if (! bcryptCompare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. - - Meteor.defer(async () => { + Meteor.defer(() => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - await bcryptHash(formattedPassword, Accounts._bcryptRounds()) + bcryptHash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -97,13 +99,7 @@ const checkPasswordAsync = async (user, password) => { return result; }; - -const checkPassword = (user, password) => { - return Promise.await(checkPasswordAsync(user, password)); -}; - -Accounts._checkPassword = checkPassword; -Accounts._checkPasswordAsync = checkPasswordAsync; +const checkPassword = Accounts._checkPassword; /// /// LOGIN @@ -167,7 +163,7 @@ const passwordValidator = Match.OneOf( // // Note that neither password option is secure without SSL. // -Accounts.registerLoginHandler("password", async options => { +Accounts.registerLoginHandler("password", options => { if (!options.password) return undefined; // don't handle @@ -192,7 +188,7 @@ Accounts.registerLoginHandler("password", async options => { Accounts._handleError("User has no password set"); } - const result = await checkPasswordAsync(user, options.password); + const result = checkPassword(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -262,7 +258,7 @@ Accounts.setUsername = (userId, newUsername) => { // Let the user change their own password if they know the old // password. `oldPassword` and `newPassword` should be objects with keys // `digest` and `algorithm` (representing the SHA256 of the password). -Meteor.methods({changePassword: async function (oldPassword, newPassword) { +Meteor.methods({changePassword: function (oldPassword, newPassword) { check(oldPassword, passwordValidator); check(newPassword, passwordValidator); @@ -282,12 +278,12 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = await checkPasswordAsync(user, oldPassword); + const result = checkPassword(user, oldPassword); if (result.error) { throw result.error; } - const hashed = await hashPassword(newPassword); + const hashed = hashPassword(newPassword); // It would be better if this removed ALL existing tokens and replaced // the token for the current connection with a new one, but that would @@ -320,10 +316,10 @@ Meteor.methods({changePassword: async function (oldPassword, newPassword) { * @param {Object} options.logout Logout all current connections with this userId (default: true) * @importFromPackage accounts-base */ -Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { - check(userId, String); - check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); - check(options, Match.Maybe({ logout: Boolean })); +Accounts.setPassword = (userId, newPlaintextPassword, options) => { + check(userId, String) + check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)) + check(options, Match.Maybe({ logout: Boolean })) options = { logout: true , ...options }; const user = getUserById(userId, {fields: {_id: 1}}); @@ -335,7 +331,7 @@ Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { $unset: { 'services.password.reset': 1 }, - $set: {'services.password.bcrypt': await hashPassword(newPlaintextPassword)} + $set: {'services.password.bcrypt': hashPassword(newPlaintextPassword)} }; if (options.logout) { @@ -345,19 +341,6 @@ Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { Meteor.users.update({_id: user._id}, update); }; -/** - * @summary Forcibly change the password for a user. - * @locus Server - * @param {String} userId The id of the user to update. - * @param {String} newPassword A new password for the user. - * @param {Object} [options] - * @param {Object} options.logout Logout all current connections with this userId (default: true) - * @importFromPackage accounts-base - */ -Accounts.setPassword = (userId, newPlaintextPassword, options) => { - return Promise.await(Accounts.setPasswordAsync(userId, newPlaintextPassword, options)); -}; - /// /// RESETTING VIA EMAIL @@ -577,15 +560,15 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData, extraParams) => { // Take token from sendResetPasswordEmail or sendEnrollmentEmail, change // the users password, and log them in. -Meteor.methods({resetPassword: async function (...args) { +Meteor.methods({resetPassword: function (...args) { const token = args[0]; const newPassword = args[1]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "resetPassword", args, "password", - async () => { + () => { check(token, String); check(newPassword, passwordValidator); @@ -634,7 +617,7 @@ Meteor.methods({resetPassword: async function (...args) { error: new Meteor.Error(403, "Token has invalid email address") }; - const hashed = await hashPassword(newPassword); + const hashed = hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be // logged in as. Make sure to avoid logging ourselves out if this @@ -729,9 +712,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData, extraParams) => // Take token from sendVerificationEmail, mark the email as verified, // and log them in. -Meteor.methods({verifyEmail: async function (...args) { +Meteor.methods({verifyEmail: function (...args) { const token = args[0]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "verifyEmail", args, @@ -905,7 +888,7 @@ Accounts.removeEmail = (userId, email) => { // does the actual user insertion. // // returns the user id -const createUser = async options => { +const createUser = options => { // Unknown keys allowed, because a onCreateUserHook can take arbitrary // options. check(options, Match.ObjectIncluding({ @@ -920,22 +903,22 @@ const createUser = async options => { const user = {services: {}}; if (password) { - const hashed = await hashPassword(password); + const hashed = hashPassword(password); user.services.password = { bcrypt: hashed }; } - return Accounts._createUserCheckingDuplicates({ user, email, username, options }); + return Accounts._createUserCheckingDuplicates({ user, email, username, options }) }; // method for create user. Requests come from the client. -Meteor.methods({createUser: async function (...args) { +Meteor.methods({createUser: function (...args) { const options = args[0]; - return await Accounts._loginMethod( + return Accounts._loginMethod( this, "createUser", args, "password", - async () => { + () => { // createUser() above does more checking. check(options, Object); if (Accounts._options.forbidClientAccountCreation) @@ -943,7 +926,7 @@ Meteor.methods({createUser: async function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - const userId = await Accounts.createUserVerifyingEmail(options); + const userId = Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -965,10 +948,10 @@ Meteor.methods({createUser: async function (...args) { * @param {Object} options.profile The user's profile, typically including the `name` field. * @importFromPackage accounts-base * */ -Accounts.createUserVerifyingEmail = async (options) => { +Accounts.createUserVerifyingEmail = (options) => { options = { ...options }; // Create user. result contains id and token. - const userId = await createUser(options); + const userId = createUser(options); // safety belt. createUser is supposed to throw on error. send 500 error // instead of sending a verification email with empty userid. if (! userId) @@ -993,15 +976,14 @@ Accounts.createUserVerifyingEmail = async (options) => { // Unlike the client version, this does not log you in as this user // after creation. // -// returns Promise or throws an error if it can't create +// returns userId or throws an error if it can't create // // XXX add another argument ("server options") that gets sent to onCreateUser, // which is always empty when called from the createUser method? eg, "admin: // true", which we want to prevent the client from setting, but which a custom // method calling Accounts.createUser could set? // - -Accounts.createUserAsync = async (options, callback) => { +Accounts.createUser = (options, callback) => { options = { ...options }; // XXX allow an optional callback? @@ -1012,23 +994,6 @@ Accounts.createUserAsync = async (options, callback) => { return createUser(options); }; -// Create user directly on the server. -// -// Unlike the client version, this does not log you in as this user -// after creation. -// -// returns userId or throws an error if it can't create -// -// XXX add another argument ("server options") that gets sent to onCreateUser, -// which is always empty when called from the createUser method? eg, "admin: -// true", which we want to prevent the client from setting, but which a custom -// method calling Accounts.createUser could set? -// - -Accounts.createUser = (options, callback) => { - return Promise.await(Accounts.createUserAsync(options, callback)); -}; - /// /// PASSWORD-SPECIFIC INDEXES ON USERS /// diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 0266c977f2..23e7e6ca8c 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1747,7 +1747,7 @@ if (Meteor.isServer) (() => { Tinytest.addAsync( 'passwords - allow custom bcrypt rounds', - async (test, done) => { + (test, done) => { const getUserHashRounds = user => Number(user.services.password.bcrypt.substring(4, 6)); @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - await Accounts._checkPasswordAsync(user1, password); + Accounts._checkPassword(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 453a9ea4d2..4453e83e92 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,213 +2,206 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" }, "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dependencies": { "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" } } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" - } - } + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" }, "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" }, "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -226,9 +219,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -256,139 +249,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", - "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" }, "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" }, "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" }, "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" }, "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" }, "@babel/plugin-transform-parameters": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", - "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" }, "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" }, "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" }, "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" }, "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" }, "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" }, "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" }, "@babel/runtime": { "version": "7.17.2", @@ -396,49 +389,39 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" }, "@meteorjs/babel": { - "version": "7.17.2-beta.0", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", - "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" + "version": "7.16.0-beta.1", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", + "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -453,9 +436,9 @@ } }, "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "acorn": { "version": "6.4.2", @@ -480,33 +463,38 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -518,14 +506,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", - "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -535,17 +523,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", - "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -560,62 +548,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", - "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -625,12 +613,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" }, "babel-preset-meteor": { "version": "7.10.0", @@ -638,19 +626,24 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", - "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", + "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" }, "caniuse-lite": { - "version": "1.0.30001436", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", - "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" }, "chalk": { "version": "2.4.2", @@ -665,27 +658,39 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" }, "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" }, "escalade": { "version": "3.1.1", @@ -695,7 +700,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "estree-walker": { "version": "2.0.2", @@ -717,6 +722,11 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -730,12 +740,17 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" }, "is-reference": { "version": "1.2.1", @@ -765,22 +780,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "ms": { "version": "2.1.2", @@ -788,9 +803,19 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" }, "path-parse": { "version": "1.0.7", @@ -813,52 +838,62 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" }, "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" }, "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" }, "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -877,12 +912,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -895,19 +930,14 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" } } } diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index a3ecdbed82..be0b0b6110 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.10.1' + version: '7.9.0' }); Npm.depends({ - '@meteorjs/babel': '7.17.2-beta.0', + '@meteorjs/babel': '7.16.1-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index a43b8dec7e..adb2b73436 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.4', + version: '0.16.3', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/email.js b/packages/email/email.js index eed8dbd9b3..3f64e23692 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Log } from 'meteor/logging'; import { Hook } from 'meteor/callback-hook'; +import Future from 'fibers/future'; import url from 'url'; import nodemailer from 'nodemailer'; import wellKnow from 'nodemailer/lib/well-known'; @@ -24,7 +25,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function (mailUrlString) { +const makeTransport = function(mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -59,7 +60,7 @@ const makeTransport = function (mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function (settings = undefined, url = undefined) { +const knownHostsTransport = function(settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -109,7 +110,7 @@ const knownHostsTransport = function (settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function () { +const getTransport = function() { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -137,40 +138,40 @@ const getTransport = function () { }; let nextDevModeMailId = 0; - -EmailTest._getAndIncNextDevModeMailId = function () { - return nextDevModeMailId++; -}; +let output_stream = process.stdout; // Testing hooks -EmailTest.resetNextDevModeMailId = function () { +EmailTest.overrideOutputStream = function(stream) { nextDevModeMailId = 0; + output_stream = stream; }; -const devModeSendAsync = function (mail, options) { - const stream = options?.stream || process.stdout; - return new Promise((resolve, reject) => { - let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); +EmailTest.restoreOutputStream = function() { + output_stream = process.stdout; +}; - // This approach does not prevent other writers to stdout from interleaving. - const output = ['====== BEGIN MAIL #' + devModeMailId + ' ======\n']; - output.push( - '(Mail not sent; to enable sending, set the MAIL_URL ' + +const devModeSend = function(mail) { + let devModeMailId = nextDevModeMailId++; + + const stream = output_stream; + + // This approach does not prevent other writers to stdout from interleaving. + stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); + stream.write( + '(Mail not sent; to enable sending, set the MAIL_URL ' + 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.on('data', buffer => { - output.push(buffer.toString()); - }); - readStream.on('end', function () { - output.push('====== END MAIL #' + devModeMailId + ' ======\n'); - stream.write(output.join(''), () => resolve()); - }); - readStream.on('error', (err) => reject(err)); + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.pipe(stream, { end: false }); + const future = new Future(); + readStream.on('end', function() { + stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); + future.return(); }); + future.wait(); }; -const smtpSend = function (transport, mail) { +const smtpSend = function(transport, mail) { transport._syncSendMail(mail); }; @@ -185,7 +186,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function (f) { +Email.hookSend = function(f) { return sendHooks.register(f); }; @@ -230,75 +231,23 @@ Email.customTransport = undefined; * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function (options) { - if (Email.customTransport) { - // Preserve current behavior - const email = options.mailComposer ? options.mailComposer.mail : options; - let send = true; - sendHooks.forEach((hook) => { - send = hook(email); - return send; - }); - if (!send) { - return; - } - const packageSettings = Meteor.settings.packages?.email || {}; - Email.customTransport({ packageSettings, ...email }); - return; +Email.send = function(options) { + if (options.mailComposer) { + options = options.mailComposer.mail; } - // Using Fibers Promise.await - return Promise.await(Email.sendAsync(options)); -}; - -/** - * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server - * or if mail server returns an error. All fields should match - * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. - * - * If the `MAIL_URL` environment variable is set, actually sends the email. - * Otherwise, prints the contents of the email to standard out. - * - * Note that this package is based on **nodemailer**, so make sure to refer to - * [the documentation](http://nodemailer.com/) - * when using the `attachments` or `mailComposer` options. - * - * @locus Server - * @return {Promise} - * @param {Object} options - * @param {String} [options.from] "From:" address (required) - * @param {String|String[]} options.to,cc,bcc,replyTo - * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses - * @param {String} [options.inReplyTo] Message-ID this message is replying to - * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to - * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value - * @param {String} [options.subject] "Subject:" line - * @param {String} [options.text|html] Mail body (in plain text and/or HTML) - * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch - * @param {String} [options.icalEvent] iCalendar event attachment - * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. - * @param {Object[]} [options.attachments] Array of attachment objects, as - * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). - * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) - * object representing the message to be sent. Overrides all other options. - * You can create a `MailComposer` object via - * `new EmailInternals.NpmModules.mailcomposer.module`. - */ -Email.sendAsync = async function (options) { - - const email = options.mailComposer ? options.mailComposer.mail : options; let send = true; - sendHooks.forEach((hook) => { - send = hook(email); + sendHooks.forEach(hook => { + send = hook(options); return send; }); - if (!send) { - return; - } + if (!send) return; - if (Email.customTransport) { + const customTransport = Email.customTransport; + if (customTransport) { const packageSettings = Meteor.settings.packages?.email || {}; - return Email.customTransport({ packageSettings, ...email }); + customTransport({ packageSettings, ...options }); + return; } const mailUrlEnv = process.env.MAIL_URL; @@ -314,8 +263,8 @@ Email.sendAsync = async function (options) { if (mailUrlEnv || mailUrlSettings) { const transport = getTransport(); - smtpSend(transport, email); + smtpSend(transport, options); return; } - return devModeSendAsync(email, options); + devModeSend(options); }; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js deleted file mode 100644 index a8706ab1c9..0000000000 --- a/packages/email/email_test_helpers.js +++ /dev/null @@ -1,21 +0,0 @@ -import streamBuffers from 'stream-buffers'; - -export const devWarningBanner = - '(Mail not sent; to enable ' + - 'sending, set the MAIL_URL environment variable.)\n'; - -export const smokeEmailTest = (testFunction) => { - // This only tests dev mode, so don't run the test if this is deployed. - if (process.env.MAIL_URL) return; - const stream = new streamBuffers.WritableStreamBuffer(); - EmailTest.resetNextDevModeMailId(); - testFunction(stream); -}; - -export const canonicalize = (string) => { - // Remove generated content for test.equal to succeed. - return string - .replace(/Message-ID: <[^<>]*>\r\n/, 'Message-ID: <...>\r\n') - .replace(/Date: (?!dummy).*\r\n/, 'Date: ...\r\n') - .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/gm, '$1--...$2'); -}; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 6f016f26b9..877264ce95 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,85 +1,304 @@ -import { Email } from 'meteor/email'; -import { smokeEmailTest } from './email_test_helpers'; -import { TEST_CASES } from './email_tests_data'; +import streamBuffers from 'stream-buffers'; -const CUSTOM_TRANSPORT_SETTINGS = { - email: { service: '1on1', user: 'test', password: 'pwd' }, -}; +const devWarningBanner = "(Mail not sent; to enable " + + "sending, set the MAIL_URL environment variable.)\n"; -const sleep = (ms) => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; +function smokeEmailTest(testFunction) { + // This only tests dev mode, so don't run the test if this is deployed. + if (process.env.MAIL_URL) return; -// Create dynamic sync tests -TEST_CASES.forEach(({ title, options, testCalls }) => { - Tinytest.add(`[Sync] ${title}`, function (test) { - smokeEmailTest((stream) => { - Object.entries(options).forEach(([key, option]) => { - const testCall = testCalls[key]; - Email.send({ ...option, stream }); - testCall(test, stream); - }); - }); - }); -}); + try { + const stream = new streamBuffers.WritableStreamBuffer; + EmailTest.overrideOutputStream(stream); -// Create dynamic async tests -TEST_CASES.forEach(({ title, options, testCalls }) => { - Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { - smokeEmailTest((stream) => { - const allPromises = Object.entries(options).map(([key, option]) => { - const testCall = testCalls[key]; - return Email.sendAsync({ ...option, stream }).then(() => { - testCall(test, stream); - }); - }); - Promise.all(allPromises).then(() => onComplete()); - }); - }); -}); + testFunction(stream); -// Individual sync tests - -Tinytest.add( - '[Sync] email - alternate API is used for sending gets data', - function (test) { - smokeEmailTest(function (stream) { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }); - test.equal(stream.getContentsAsString('utf8'), false); - }); - - smokeEmailTest(function (stream) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }); - - test.equal(stream.getContentsAsString('utf8'), false); - }); - Email.customTransport = undefined; - Meteor.settings.packages = undefined; + } finally { + EmailTest.restoreOutputStream(); } -); +} -Tinytest.add('[Sync] email - hooks stop the sending', function (test) { +function canonicalize(string) { + // Remove generated content for test.equal to succeed. + return string.replace(/Message-ID: <[^<>]*>\r\n/, "Message-ID: <...>\r\n") + .replace(/Date: (?!dummy).*\r\n/, "Date: ...\r\n") + .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); +} + +Tinytest.add("email - fully customizable", function (test) { + smokeEmailTest(function(stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + cc: ["friends@example.com", "enemies@example.com"], + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + headers: { + 'X-Meteor-Test': 'a custom header', + 'Date': 'dummy', + }, + }); + // XXX brittle if mailcomposer changes header order, etc + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "X-Meteor-Test: a custom header\r\n" + + "Date: dummy\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Cc: friends@example.com, enemies@example.com\r\n" + + "Subject: This is the subject\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "This is the body\n" + + "of the message\n" + + "From us.\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - undefined headers sends properly", function (test) { + smokeEmailTest(function (stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + }); + + test.matches(canonicalize(stream.getContentsAsString("utf8")), + /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m); + }); +}); + +Tinytest.add("email - multiple e-mails same stream", function (test) { + smokeEmailTest(function (stream) { + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + }); + + const contents = canonicalize(stream.getContentsAsString("utf8")); + test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); + test.matches(contents, /^From: foo@example.com$/m); + test.matches(contents, /^To: bar@example.com$/m); + + Email.send({ + from: "qux@example.com", + to: "baz@example.com", + subject: "This is important", + text: "This is another message\nFrom Qux.", + }); + + const contents2 = canonicalize(stream.getContentsAsString("utf8")); + test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); + test.matches(contents2, /^From: qux@example.com$/m); + test.matches(contents2, /^To: baz@example.com$/m); + + }); +}); + +Tinytest.add("email - using mail composer", function (test) { + smokeEmailTest(function (stream) { + // Test direct MailComposer usage. + const mc = new EmailInternals.NpmModules.mailcomposer.module({ + from: "a@b.com", + text: "body" + }); + Email.send({mailComposer: mc}); + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: a@b.com\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "body\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - date auto generated", function (test) { + smokeEmailTest(function (stream) { + // Test if date header is automatically generated, if not specified + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is the subject", + text: "This is the body\nof the message\nFrom us.", + headers: { + 'X-Meteor-Test': 'a custom header', + }, + }); + + test.matches(canonicalize(stream.getContentsAsString("utf8")), + /^Date: .+$/m); + }); +}); + +Tinytest.add("email - long lines", function (test) { + smokeEmailTest(function (stream) { + // Test that long header lines get wrapped with single leading whitespace, + // and that long body lines get wrapped with quoted-printable conventions. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "This is a very very very very very very very very very very very very long subject", + text: "This is a very very very very very very very very very very very very long text", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Subject: This is a very very very very very very very very " + + "very very very\r\n very long subject\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: quoted-printable\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "This is a very very very very very very very very very very " + + "very very long =\r\ntext\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - unicode", function (test) { + smokeEmailTest(function (stream) { + // Test that unicode characters in header and body get encoded. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + subject: "\u263a", + text: "I \u2665 Meteor", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: text/plain; charset=utf-8\r\n" + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Subject: =?UTF-8?B?4pi6?=\r\n" + + "Message-ID: <...>\r\n" + + "Content-Transfer-Encoding: quoted-printable\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "I =E2=99=A5 Meteor\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - text and html", function (test) { + smokeEmailTest(function (stream) { + // Test including both text and HTML versions of message. + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + + test.equal(canonicalize(stream.getContentsAsString("utf8")), + "====== BEGIN MAIL #0 ======\n" + + devWarningBanner + + "Content-Type: multipart/alternative;\r\n" + + ' boundary="--...-Part_1"\r\n' + + "From: foo@example.com\r\n" + + "To: bar@example.com\r\n" + + "Message-ID: <...>\r\n" + + "Date: ...\r\n" + + "MIME-Version: 1.0\r\n" + + "\r\n" + + "----...-Part_1\r\n" + + "Content-Type: text/plain; charset=utf-8\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "\r\n" + + "*Cool*, man\r\n" + + "----...-Part_1\r\n" + + "Content-Type: text/html; charset=utf-8\r\n" + + "Content-Transfer-Encoding: 7bit\r\n" + + "\r\n" + + "Cool, man\r\n" + + "----...-Part_1--\r\n" + + "====== END MAIL #0 ======\n"); + }); +}); + +Tinytest.add("email - alternate API is used for sending gets data", function(test) { + smokeEmailTest(function(stream) { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + test.equal(stream.getContentsAsString("utf8"), false); + }); + + smokeEmailTest(function(stream) { + Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' } }; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + Email.send({ + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", + }); + + test.equal(stream.getContentsAsString("utf8"), false); + }); + Email.customTransport = undefined; + Meteor.settings.packages = undefined; +}); + +Tinytest.add("email - URL string for known hosts", function(test) { + const oneTransport = EmailTest.knowHostsTransport({ service: '1und1', user: 'test', password: 'pwd' }); + test.equal(oneTransport.transporter.auth.type, 'LOGIN'); + test.equal(oneTransport.transporter.auth.user, 'test'); + + const aolUrlTransport = EmailTest.knowHostsTransport(null, 'AOL://test:pwd@aol.com'); + test.equal(aolUrlTransport.transporter.auth.user, 'test'); + test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); + + const outlookTransport = EmailTest.knowHostsTransport(null, 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com'); + const outlookTransport2 = EmailTest.knowHostsTransport(undefined, 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com'); + test.equal(outlookTransport.transporter.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport.options.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport.transporter.options.service, 'outlook365'); + test.equal(outlookTransport2.transporter.auth.user, 'firstname.lastname%40hotmail.com'); + test.equal(outlookTransport2.transporter.options.service, 'outlook365'); + + const hotmailTransport = EmailTest.knowHostsTransport(undefined, 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com'); + console.dir(hotmailTransport); + test.equal(hotmailTransport.transporter.options.service, 'hotmail'); + + const falseService = { service: '1on1', user: 'test', password: 'pwd' }; + const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; + test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); + test.throws(() => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), errorMsg); +}); + +Tinytest.add("email - hooks stop the sending", function(test) { // Register hooks const hook1 = Email.hookSend((options) => { // Test that we get options through @@ -94,218 +313,17 @@ Tinytest.add('[Sync] email - hooks stop the sending', function (test) { const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(function (stream) { + smokeEmailTest(function(stream) { Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, + from: "foo@example.com", + to: "bar@example.com", + text: "*Cool*, man", + html: "Cool, man", }); - test.equal(stream.getContentsAsString('utf8'), false); + test.equal(stream.getContentsAsString("utf8"), false); }); hook1.stop(); hook2.stop(); hook3.stop(); }); - -// Individual Async tests - -Tinytest.addAsync( - '[Async] email - alternate API is used for sending gets data', - function (test, onComplete) { - const allPromises = []; - smokeEmailTest((stream) => { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - allPromises.push( - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - }) - ); - }); - - smokeEmailTest(function (stream) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - allPromises.push( - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - }) - ); - }); - Promise.all(allPromises).then(() => { - Email.customTransport = undefined; - Meteor.settings.packages = undefined; - onComplete(); - }); - } -); - -Tinytest.addAsync( - '[Async] email - hooks stop the sending', - function (test, onComplete) { - // Register hooks - const hook1 = Email.hookSend((options) => { - // Test that we get options through - test.equal(options.from, 'foo@example.com'); - console.log('EXECUTE'); - return true; - }); - const hook2 = Email.hookSend(() => { - console.log('STOP'); - return false; - }); - const hook3 = Email.hookSend(() => { - console.log('FAIL'); - }); - smokeEmailTest((stream) => { - Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - stream, - }).then(() => { - test.equal(stream.getContentsAsString('utf8'), false); - hook1.stop(); - hook2.stop(); - hook3.stop(); - onComplete(); - }); - }); - } -); - -// Another tests - -Tinytest.add('[Sync] email - URL string for known hosts', function (test) { - const oneTransport = EmailTest.knowHostsTransport({ - service: '1und1', - user: 'test', - password: 'pwd', - }); - test.equal(oneTransport.transporter.auth.type, 'LOGIN'); - test.equal(oneTransport.transporter.auth.user, 'test'); - - const aolUrlTransport = EmailTest.knowHostsTransport( - null, - 'AOL://test:pwd@aol.com' - ); - test.equal(aolUrlTransport.transporter.auth.user, 'test'); - test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); - - const outlookTransport = EmailTest.knowHostsTransport( - null, - 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com' - ); - const outlookTransport2 = EmailTest.knowHostsTransport( - undefined, - 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com' - ); - test.equal( - outlookTransport.transporter.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal( - outlookTransport.options.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal(outlookTransport.transporter.options.service, 'outlook365'); - test.equal( - outlookTransport2.transporter.auth.user, - 'firstname.lastname%40hotmail.com' - ); - test.equal(outlookTransport2.transporter.options.service, 'outlook365'); - - const hotmailTransport = EmailTest.knowHostsTransport( - undefined, - 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com' - ); - console.dir(hotmailTransport); - test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - - const falseService = CUSTOM_TRANSPORT_SETTINGS.email; - const errorMsg = - 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; - test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); - test.throws( - () => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), - errorMsg - ); -}); - -Tinytest.addAsync( - '[Async] email - with custom transport exception', - async function (test) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - throw new Meteor.Error('Expected error'); - }; - await Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - }).catch((err) => { - test.equal(err.error, 'Expected error'); - }); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - } -); - -Tinytest.addAsync( - '[Async] email - with custom transport long time running', - async function (test) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = async (options) => { - await sleep(3000); - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - await Email.sendAsync({ - from: 'foo@example.com', - to: 'bar@example.com', - }); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - } -); - -Tinytest.addAsync( - '[Sync] email - with custom transport long time running', - function (test, onComplete) { - Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; - Email.customTransport = async (options) => { - await sleep(3000); - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - Meteor.settings.packages = undefined; - Email.customTransport = undefined; - onComplete(); - }; - Email.send({ - from: 'foo@example.com', - to: 'bar@example.com', - }); - } -); diff --git a/packages/email/email_tests_data.js b/packages/email/email_tests_data.js deleted file mode 100644 index 095c1fb9d2..0000000000 --- a/packages/email/email_tests_data.js +++ /dev/null @@ -1,254 +0,0 @@ -import { canonicalize, devWarningBanner } from './email_test_helpers'; - -export const TEST_CASES = [ - { - title: 'email - fully customizable', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - cc: ['friends@example.com', 'enemies@example.com'], - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - headers: { - 'X-Meteor-Test': 'a custom header', - Date: 'dummy', - }, - }, - }, - testCalls: { - 0: (test, stream) => { - // XXX brittle if mailcomposer changes header order, etc - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'X-Meteor-Test: a custom header\r\n' + - 'Date: dummy\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Cc: friends@example.com, enemies@example.com\r\n' + - 'Subject: This is the subject\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'This is the body\n' + - 'of the message\n' + - 'From us.\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - undefined headers sends properly', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - }, - }, - testCalls: { - 0: (test, stream) => { - test.matches( - canonicalize(stream.getContentsAsString('utf8')), - /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m - ); - }, - }, - }, - { - title: 'email - multiple e-mails same stream', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - }, - 1: { - from: 'qux@example.com', - to: 'baz@example.com', - subject: 'This is important', - text: 'This is another message\nFrom Qux.', - }, - }, - - testCalls: { - 0: (test, stream) => { - const contents = canonicalize(stream.getContentsAsString('utf8')); - test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); - test.matches(contents, /^From: foo@example.com$/m); - test.matches(contents, /^To: bar@example.com$/m); - }, - 1: (test, stream) => { - const contents2 = canonicalize(stream.getContentsAsString('utf8')); - test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); - test.matches(contents2, /^From: qux@example.com$/m); - test.matches(contents2, /^To: baz@example.com$/m); - }, - }, - }, - { - title: 'email - using mail composer', - options: { - 0: { - mailComposer: new EmailInternals.NpmModules.mailcomposer.module({ - from: 'a@b.com', - text: 'body', - }), - }, - }, - - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: a@b.com\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'body\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - date auto generated', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: 'This is the subject', - text: 'This is the body\nof the message\nFrom us.', - headers: { - 'X-Meteor-Test': 'a custom header', - }, - }, - }, - testCalls: { - 0: (test, stream) => { - test.matches( - canonicalize(stream.getContentsAsString('utf8')), - /^Date: .+$/m - ); - }, - }, - }, - { - title: 'email - long lines', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: - 'This is a very very very very very very very very very very very very long subject', - text: 'This is a very very very very very very very very very very very very long text', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Subject: This is a very very very very very very very very ' + - 'very very very\r\n very long subject\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: quoted-printable\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'This is a very very very very very very very very very very ' + - 'very very long =\r\ntext\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - unicode', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - subject: '\u263a', - text: 'I \u2665 Meteor', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Subject: =?UTF-8?B?4pi6?=\r\n' + - 'Message-ID: <...>\r\n' + - 'Content-Transfer-Encoding: quoted-printable\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - 'I =E2=99=A5 Meteor\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, - { - title: 'email - text and html', - options: { - 0: { - from: 'foo@example.com', - to: 'bar@example.com', - text: '*Cool*, man', - html: 'Cool, man', - }, - }, - testCalls: { - 0: (test, stream) => { - test.equal( - canonicalize(stream.getContentsAsString('utf8')), - '====== BEGIN MAIL #0 ======\n' + - devWarningBanner + - 'Content-Type: multipart/alternative;\r\n' + - ' boundary="--...-Part_1"\r\n' + - 'From: foo@example.com\r\n' + - 'To: bar@example.com\r\n' + - 'Message-ID: <...>\r\n' + - 'Date: ...\r\n' + - 'MIME-Version: 1.0\r\n' + - '\r\n' + - '----...-Part_1\r\n' + - 'Content-Type: text/plain; charset=utf-8\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - '\r\n' + - '*Cool*, man\r\n' + - '----...-Part_1\r\n' + - 'Content-Type: text/html; charset=utf-8\r\n' + - 'Content-Transfer-Encoding: 7bit\r\n' + - '\r\n' + - 'Cool, man\r\n' + - '----...-Part_1--\r\n' + - '====== END MAIL #0 ======\n' - ); - }, - }, - }, -]; - diff --git a/packages/email/package.js b/packages/email/package.js index cc02138f6d..326bad392a 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.3', + version: '2.2.2', }); Npm.depends({ diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index d9c824f27f..c2964cf842 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -4,13 +4,13 @@ import { Accounts } from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; -Facebook.handleAuthFromAccessToken = async (accessToken, expiresAt) => { +Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'middle_name', 'name_format', 'picture', 'short_name']; - const identity = await getIdentity(accessToken, whitelisted); + const identity = getIdentity(accessToken, whitelisted); const fields = {}; whitelisted.forEach(field => fields[field] = identity[field]); @@ -34,8 +34,8 @@ Accounts.registerLoginHandler(request => { return Accounts.updateOrCreateUserFromExternalService('facebook', facebookData.serviceData, facebookData.options); }); -OAuth.registerService('facebook', 2, null, async query => { - const response = await getTokenResponse(query); +OAuth.registerService('facebook', 2, null, query => { + const response = getTokenResponse(query); const { accessToken } = response; const { expiresIn } = response; @@ -52,7 +52,7 @@ function getAbsoluteUrlOptions(query) { const redirectUrl = new URL(state.redirectUrl); return { rootUrl: redirectUrl.origin, - }; + } } catch (e) { console.error( `Failed to complete OAuth handshake with Facebook because it was not able to obtain the redirect url from the state and you are using overrideRootUrlFromStateRedirectUrl.`, e @@ -61,86 +61,73 @@ function getAbsoluteUrlOptions(query) { } } -/** - * @typedef {Object} UserAccessToken - * @property {string} accessToken - User access Token - * @property {number} expiresIn - lifetime of token in seconds - */ -/** - * @async - * @function getTokenResponse - * @param {Object} query - An object with the code. - * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) - */ -const getTokenResponse = async (query) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'facebook', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +// returns an object containing: +// - accessToken +// - expiresIn: lifetime of token in seconds +const getTokenResponse = query => { + const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); - const absoluteUrlOptions = getAbsoluteUrlOptions(query); - const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); + let responseContent; + try { - return OAuth._fetch( - `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, - 'GET', - { - queryParams: { - client_id: config.appId, - redirect_uri: redirectUri, - client_secret: OAuth.openSecret(config.secret), - code: query.code, - }, - } - ) - .then((res) => res.json()) - .then(data => { - const fbAccessToken = data.access_token; - const fbExpires = data.expires_in; - if (!fbAccessToken) { - throw new Error("Failed to complete OAuth handshake with facebook " + - `-- can't find access token in HTTP response. ${data}`); - } - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; - }) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Facebook. ${err.message}` - ), - { response: err.response } - ); - }); + const absoluteUrlOptions = getAbsoluteUrlOptions(query); + const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); + // Request an access token + responseContent = HTTP.get( + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { + params: { + client_id: config.appId, + redirect_uri: redirectUri, + client_secret: OAuth.openSecret(config.secret), + code: query.code + } + }).data; + } catch (err) { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), + { response: err.response }, + ); + } + + const fbAccessToken = responseContent.access_token; + const fbExpires = responseContent.expires_in; + + if (!fbAccessToken) { + throw new Error("Failed to complete OAuth handshake with facebook " + + `-- can't find access token in HTTP response. ${responseContent}`); + } + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; }; -const getIdentity = async (accessToken, fields) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'facebook', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +const getIdentity = (accessToken, fields) => { + const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); // Generate app secret proof that is a sha256 hash of the app access token, with the app secret as the key // https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof const hmac = crypto.createHmac('sha256', OAuth.openSecret(config.secret)); hmac.update(accessToken); - return OAuth._fetch(`https://graph.facebook.com/v${API_VERSION}/me`, 'GET', { - queryParams: { - access_token: accessToken, - appsecret_proof: hmac.digest('hex'), - fields: fields.join(','), - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error(`Failed to fetch identity from Facebook. ${err.message}`), - { response: err.response } - ); - }); + try { + return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { + params: { + access_token: accessToken, + appsecret_proof: hmac.digest('hex'), + fields: fields.join(",") + } + }).data; + } catch (err) { + throw Object.assign( + new Error(`Failed to fetch identity from Facebook. ${err.message}`), + { response: err.response }, + ); + } }; Facebook.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 98b393d2a9..5df363643a 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.2' + version: '1.11.1' }); Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/github-oauth/github_server.js b/packages/github-oauth/github_server.js index 7b4f36f5f6..b71995d1c0 100644 --- a/packages/github-oauth/github_server.js +++ b/packages/github-oauth/github_server.js @@ -1,9 +1,12 @@ Github = {}; -OAuth.registerService('github', 2, null, async (query) => { - const accessToken = await getAccessToken(query); - const identity = await getIdentity(accessToken); - const emails = await getEmails(accessToken); +OAuth.registerService('github', 2, null, (query) => { + const accessTokenCall = Meteor.wrapAsync(getAccessToken); + const accessToken = accessTokenCall(query); + const identityCall = Meteor.wrapAsync(getIdentity); + const identity = identityCall(accessToken); + const emailsCall = Meteor.wrapAsync(getEmails); + const emails = emailsCall(accessToken); const primaryEmail = emails.find((email) => email.primary); return { @@ -28,7 +31,7 @@ OAuth.registerService('github', 2, null, async (query) => { let userAgent = 'Meteor'; if (Meteor.release) userAgent += `/${Meteor.release}`; -const getAccessToken = async (query) => { +const getAccessToken = async (query, callback) => { const config = ServiceConfiguration.configurations.findOne({ service: 'github' }); @@ -65,16 +68,18 @@ const getAccessToken = async (query) => { ); } if (response.error) { + callback(response.error); // if the http response was a json object with an error attribute throw new Error( `Failed to complete OAuth handshake with GitHub. ${response.error}` ); } else { + callback(null, response.access_token); return response.access_token; } }; -const getIdentity = async (accessToken) => { +const getIdentity = async (accessToken, callback) => { try { const request = await fetch('https://api.github.com/user', { method: 'GET', @@ -84,8 +89,11 @@ const getIdentity = async (accessToken) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - return await request.json(); + const response = await request.json(); + callback(null, response); + return response; } catch (err) { + callback(err.message); throw Object.assign( new Error(`Failed to fetch identity from Github. ${err.message}`), { response: err.response } @@ -93,7 +101,7 @@ const getIdentity = async (accessToken) => { } }; -const getEmails = async (accessToken) => { +const getEmails = async (accessToken, callback) => { try { const request = await fetch('https://api.github.com/user/emails', { method: 'GET', @@ -103,8 +111,11 @@ const getEmails = async (accessToken) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - return await request.json(); + const response = await request.json(); + callback(null, response); + return response; } catch (err) { + callback(err.message, []); return []; } }; diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index 2316e275a2..de8e9415cb 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.1' + version: '1.4.0' }); Package.onUse(api => { diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index a25637be75..d13c285914 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -5,46 +5,40 @@ import { fetch } from 'meteor/fetch'; const hasOwn = Object.prototype.hasOwnProperty; // https://developers.google.com/accounts/docs/OAuth2Login#userinfocall -Google.whitelistedFields = [ - 'id', - 'email', - 'verified_email', - 'name', - 'given_name', - 'family_name', - 'picture', - 'locale', - 'timezone', - 'gender', -]; +Google.whitelistedFields = ['id', 'email', 'verified_email', 'name', 'given_name', + 'family_name', 'picture', 'locale', 'timezone', 'gender']; -const getServiceDataFromTokens = async (tokens, callback) => { +const getServiceDataFromTokens = tokens => { const { accessToken, idToken } = tokens; - const scopes = await getScopes(accessToken).catch((err) => { - const error = Object.assign( + const scopesCall = Meteor.wrapAsync(getScopes); + let scopes; + try { + scopes = scopesCall(accessToken); + } catch (err) { + throw Object.assign( new Error(`Failed to fetch tokeninfo from Google. ${err.message}`), { response: err.response } ); - callback && callback(error); - throw error; - }); - - let identity = await getIdentity(accessToken).catch((err) => { - const error = Object.assign( + } + const identityCall = Meteor.wrapAsync(getIdentity); + let identity; + try { + identity = identityCall(accessToken); + } catch (err) { + throw Object.assign( new Error(`Failed to fetch identity from Google. ${err.message}`), { response: err.response } ); - callback && callback(error); - throw error; - }); + } const serviceData = { accessToken, idToken, - scope: scopes, + scope: scopes }; - if (hasOwn.call(tokens, 'expiresIn')) { - serviceData.expiresAt = Date.now() + 1000 * parseInt(tokens.expiresIn, 10); + if (hasOwn.call(tokens, "expiresIn")) { + serviceData.expiresAt = + Date.now() + 1000 * parseInt(tokens.expiresIn, 10); } const fields = Object.create(null); @@ -62,25 +56,22 @@ const getServiceDataFromTokens = async (tokens, callback) => { if (tokens.refreshToken) { serviceData.refreshToken = tokens.refreshToken; } - const returnValue = { + + return { serviceData, options: { profile: { - name: identity.name, - }, - }, + name: identity.name + } + } }; - - callback && callback(undefined, returnValue); - - return returnValue; }; -Accounts.registerLoginHandler(async (request) => { +Accounts.registerLoginHandler(request => { if (request.googleSignIn !== true) { return; } - console.log({ request }); + const tokens = { accessToken: request.accessToken, refreshToken: request.refreshToken, @@ -88,38 +79,29 @@ Accounts.registerLoginHandler(async (request) => { }; if (request.serverAuthCode) { - Object.assign( - tokens, - await getTokens({ - code: request.serverAuthCode, - }) - ); + Object.assign(tokens, getTokens({ + code: request.serverAuthCode + })); } let result; try { - result = await getServiceDataFromTokens(tokens); + result = getServiceDataFromTokens(tokens); } catch (err) { throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Google. ${err.message}` - ), + new Error(`Failed to complete OAuth handshake with Google. ${err.message}`), { response: err.response } ); } - console.log({ result }); - return Accounts.updateOrCreateUserFromExternalService( - 'google', - { - id: request.userId, - idToken: request.idToken, - accessToken: request.accessToken, - email: request.email, - picture: request.imageUrl, - ...result.serviceData, - }, - result.options - ); + + return Accounts.updateOrCreateUserFromExternalService("google", { + id: request.userId, + idToken: request.idToken, + accessToken: request.accessToken, + email: request.email, + picture: request.imageUrl, + ...result.serviceData, + }, result.options); }); // returns an object containing: @@ -127,48 +109,45 @@ Accounts.registerLoginHandler(async (request) => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request const getTokens = async (query, callback) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'google', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({service: 'google'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); const content = new URLSearchParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('google', config), - grant_type: 'authorization_code', - }); - const request = await fetch('https://accounts.google.com/o/oauth2/token', { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: content, + grant_type: 'authorization_code' }); + const request = await fetch( + "https://accounts.google.com/o/oauth2/token", { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: content, + }); const response = await request.json(); - if (response.error) { - // if the http response was a json object with an error attribute - callback && callback(response.error); - throw new Meteor.Error( - `Failed to complete OAuth handshake with Google. ${response.error}` - ); + if (response.error) { // if the http response was a json object with an error attribute + callback(response.error); + throw new Meteor.Error(`Failed to complete OAuth handshake with Google. ${response.error}`); } else { const data = { accessToken: response.access_token, refreshToken: response.refresh_token, expiresIn: response.expires_in, - idToken: response.id_token, + idToken: response.id_token }; - callback && callback(undefined, data); + callback(undefined, data); return data; } }; -const getServiceData = async (query) => - getServiceDataFromTokens(await getTokens(query)); +const getTokensCall = Meteor.wrapAsync(getTokens); +const getServiceData = query => getServiceDataFromTokens(getTokensCall(query)); OAuth.registerService('google', 2, null, getServiceData); @@ -180,15 +159,14 @@ const getIdentity = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/userinfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' }, - } - ); + headers: { Accept: 'application/json' } + }); response = await request.json(); } catch (e) { - callback && callback(e); + callback(e); throw new Meteor.Error(e.reason); } - callback && callback(undefined, response); + callback(undefined, response); return response; }; @@ -200,15 +178,14 @@ const getScopes = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/tokeninfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' }, - } - ); + headers: { Accept: 'application/json' } + }); response = await request.json(); } catch (e) { - callback && callback(e); + callback(e); throw new Meteor.Error(e.reason); } - callback && callback(undefined, response.scope.split(' ')); + callback(undefined, response.scope.split(' ')); return response.scope.split(' '); }; diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 141c79e6c6..102f60b0ac 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.3", + version: "1.4.2", }); Cordova.depends({ diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index bfc465c7b3..cffa8da9e5 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -1,10 +1,10 @@ Meetup = {}; -OAuth.registerService('meetup', 2, null, async query => { - const response = await getAccessToken(query); +OAuth.registerService('meetup', 2, null, query => { + const response = getAccessToken(query); const accessToken = response.access_token; const expiresAt = (+new Date) + (1000 * response.expires_in); - const identity = await getIdentity(accessToken); + const identity = getIdentity(accessToken); const { id, name, @@ -33,63 +33,50 @@ OAuth.registerService('meetup', 2, null, async query => { }; }); -const getAccessToken = async query => { +const getAccessToken = query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - const body = OAuth._addValuesToQueryParams({ - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - grant_type: 'authorization_code', - redirect_uri: OAuth._redirectUri('meetup', config), - state: query.state - }); + let response; + try { + response = HTTP.post( + "https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + grant_type: 'authorization_code', + redirect_uri: OAuth._redirectUri('meetup', config), + state: query.state + }}); + } catch (err) { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), + { response: err.response } + ); + } - return OAuth._fetch('https://secure.meetup.com/oauth2/access', 'POST', { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - }) - .then(data => data.json()) - .then(data => { - if (data.error) { - throw new Error(`Failed to complete OAuth handshake with Meetup. ${data.error.message}`); - } - return data; - }) - .catch(err => { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), - { response: err.response }, - ); - }); + if (response.data.error) { // if the http response was a json object with an error attribute + throw new Error(`Failed to complete OAuth handshake with Meetup. ${response.data.error}`); + } else { + return response.data; + } }; -const getIdentity = async accessToken => { - const body = OAuth._addValuesToQueryParams({ - member_id: 'self', - access_token: accessToken - }); - - return OAuth._fetch('https://api.meetup.com/2/members', 'POST', { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - }).then(data => data.json()) - .then(({results = []}) => results.length && results[0]) - .catch(err => { +const getIdentity = accessToken => { + try { + const response = HTTP.get( + "https://api.meetup.com/2/members", + {params: {member_id: 'self', access_token: accessToken}}); + return response.data.results && response.data.results[0]; + } catch (err) { throw Object.assign( new Error(`Failed to fetch identity from Meetup. ${err.message}`), { response: err.response } ); - }); + } }; + Meetup.retrieveCredential = (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index e5049f19cf..83df9f74a3 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.2' + version: '1.1.1' }); Package.onUse(api => { api.use('ecmascript'); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', 'server'); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index 57dd193ae1..c563ba47e8 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -1,7 +1,7 @@ -OAuth.registerService("meteor-developer", 2, null, async query => { - const response = await getTokens(query); +OAuth.registerService("meteor-developer", 2, null, query => { + const response = getTokens(query); const { accessToken } = response; - const identity = await getIdentity(accessToken); + const identity = getIdentity(accessToken); const serviceData = { accessToken: OAuth.sealSecret(accessToken), @@ -28,77 +28,69 @@ OAuth.registerService("meteor-developer", 2, null, async query => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = async (query) => { +const getTokens = query => { const config = ServiceConfiguration.configurations.findOne({ - service: 'meteor-developer', + service: 'meteor-developer' }); - if (!config) { + if (!config) throw new ServiceConfiguration.ConfigError(); + + let response; + try { + response = HTTP.post( + MeteorDeveloperAccounts._server + "/oauth2/token", { + params: { + grant_type: "authorization_code", + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('meteor-developer', config) + } + } + ); + } catch (err) { + throw Object.assign( + new Error( + "Failed to complete OAuth handshake with Meteor developer accounts. " + + err.message + ), + {response: err.response} + ); } - const body = OAuth._addValuesToQueryParams({ - grant_type: 'authorization_code', - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('meteor-developer', config), - }).toString(); + if (! response.data || response.data.error) { + // if the http response was a json object with an error attribute + throw new Error( + "Failed to complete OAuth handshake with Meteor developer accounts. " + + (response.data ? response.data.error : + "No response data") + ); + } else { + return { + accessToken: response.data.access_token, + refreshToken: response.data.refresh_token, + expiresIn: response.data.expires_in + }; + } +}; - return OAuth._fetch( - MeteorDeveloperAccounts._server + '/oauth2/token', - 'POST', - { - headers: { - Accept: 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - }, - body, - } - ) - .then((data) => data.json()) - .then((data) => { - if (data.error) { - throw new Error( - 'Failed to complete OAuth handshake with Meteor developer accounts. ' + - (data ? data.error : 'No response data') - ); +const getIdentity = accessToken => { + try { + return HTTP.get( + `${MeteorDeveloperAccounts._server}/api/v1/identity`, + { + headers: { Authorization: `Bearer ${accessToken}`} } - return { - accessToken: data.access_token, - refreshToken: data.refresh_token, - expiresIn: data.expires_in, - }; - }) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` - ), - { response: err.response } - ); - }); + ).data; + } catch (err) { + throw Object.assign( + new Error("Failed to fetch identity from Meteor developer accounts. " + + err.message), + {response: err.response} + ); + } }; -const getIdentity = async (accessToken) => { - return OAuth._fetch( - `${MeteorDeveloperAccounts._server}/api/v1/identity`, - 'GET', - { - headers: { Authorization: `Bearer ${accessToken}` }, - } - ) - .then((data) => data.json()) - .catch((err) => { - throw Object.assign( - new Error( - 'Failed to fetch identity from Meteor developer accounts. ' + - err.message - ), - { response: err.response } - ); - }); -}; - -MeteorDeveloperAccounts.retrieveCredential = - (credentialToken, credentialSecret) => +MeteorDeveloperAccounts.retrieveCredential = + (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index 36e4dbb76c..b1463542d5 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,11 +1,12 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.2' + version: '1.3.1' }); Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); + api.use('http@1.4.4 || 2.0.0', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bafb59a62e..eddeaa008c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.9.0', + version: '2.8.2', }); Package.includeTool(); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js deleted file mode 100644 index 27d9b227cb..0000000000 --- a/packages/meteor/asl-helpers.js +++ /dev/null @@ -1,22 +0,0 @@ -const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {}; -const getValueFromAslStore = key => getAslStore()[key]; -const updateAslStore = (key, value) => getAslStore()[key] = value; - -Meteor._isFibersEnabled = !process.env.DISABLE_FIBERS && Meteor.isServer; -Meteor._getAslStore = getAslStore; -Meteor._getValueFromAslStore = getValueFromAslStore; -Meteor._updateAslStore = updateAslStore; - -Meteor._runAsync = (fn, ctx) => { - if (Meteor._isFibersEnabled) { - const Fiber = Npm.require('fibers'); - - return Fiber(() => { - fn.call(ctx); - }).run(); - } - - global.asyncLocalStorage.run(Meteor._getAslStore(), () => { - fn.call(ctx); - }); -}; diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index 242921945c..ad28064003 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -71,38 +71,6 @@ Meteor._delete = function (obj /*, arguments */) { } }; - -/** - * Takes a function that has a callback argument as the last one and promissify it. - * One option would be to use node utils.promisify, but it won't work on the browser. - * @param fn - * @param context - * @param errorFirst - If the callback follows the errorFirst style - * @returns {function(...[*]): Promise} - */ -Meteor.promisify = function (fn, context, errorFirst = true) { - return function (...fnArgs) { - return new Promise((resolve, reject) => { - const callback = Meteor.bindEnvironment((error, result) => { - let _error = error, _result = result; - if (!errorFirst) { - _error = result; - _result = error; - } - - if (_error) { - return reject(_error); - } - - resolve(_result); - }); - - const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined); - return fn.apply(context || this, filteredArgs); - }); - }; -}; - // wrapAsync can wrap any function that takes some number of arguments that // can't be undefined, followed by some optional arguments, where the callback // is the last optional argument. @@ -203,3 +171,5 @@ function logErr(err) { ); } } + +Meteor._isFibersEnabled = global._isFibersEnabled; diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index eb08d994bd..0a482c0aa9 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,19 +147,12 @@ export namespace Meteor { }): void; /** - * Invokes a method with a sync stub, passing any number of arguments. + * Invokes a method passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; - /** - * Invokes a method with an async stub, passing any number of arguments. - * @param name Name of method to invoke - * @param args Optional method arguments - */ - function callAsync(name: string, ...args: any[]): Promise; - function apply< Result extends | EJSONable @@ -441,14 +434,7 @@ export namespace Meteor { */ function publish( name: string | null, - func: ( - this: Subscription, - ...args: any[] - ) => - | void - | Mongo.Cursor - | Mongo.Cursor[] - | Promise | Mongo.Cursor[]>, + func: (this: Subscription, ...args: any[]) => void, options?: { is_auto: boolean } ): void; diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 7007d77957..930478dc07 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.3' + version: '1.10.2' }); Package.registerBuildPlugin({ @@ -33,7 +33,6 @@ Package.onUse(function (api) { api.addFiles('setimmediate.js', ['client', 'server']); api.addFiles('timers.js', ['client', 'server']); api.addFiles('errors.js', ['client', 'server']); - api.addFiles('asl-helpers.js', 'server'); api.addFiles('fiber_helpers.js', 'server'); api.addFiles('fiber_stubs_client.js', 'client'); api.addFiles('startup_client.js', ['client']); @@ -55,6 +54,8 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); + + api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js deleted file mode 100644 index 755595ba6e..0000000000 --- a/packages/minifier-css/minifier-async-tests.js +++ /dev/null @@ -1,51 +0,0 @@ -import { CssTools } from './minifier'; -const TEST_CASES = [ - ['a \t\n{ color: red } \n', 'a{color:red}', 'whitespace check'], - [ - 'a \t\n{ color: red; margin: 1; } \n', - 'a{color:red;margin:1}', - 'only last one loses semicolon', - ], - [ - 'a \t\n{ color: red;;; margin: 1;;; } \n', - 'a{color:red;margin:1}', - 'more semicolons than needed', - ], - ['a , p \t\n{ color: red; } \n', 'a,p{color:red}', 'multiple selectors'], - ['body {}', '', 'removing empty rules'], - [ - '*.my-class { color: #fff; }', - '.my-class{color:#fff}', - 'removing universal selector', - ], - [ - 'p > *.my-class { color: #fff; }', - 'p>.my-class{color:#fff}', - 'removing optional whitespace around ">" in selector', - ], - [ - 'p + *.my-class { color: #fff; }', - 'p+.my-class{color:#fff}', - 'removing optional whitespace around "+" in selector', - ], - [ - 'a {\n\ - font:12px \'Helvetica\',"Arial",\'Nautica\';\n\ - background:url("/some/nice/picture.png");\n}', - 'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}', - 'removing quotes in font and url (if possible)', - ], - ['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'], -]; - -Tinytest.addAsync( - '[Async] minifier-css - simple CSS minification', - async (test) => { - const promises = TEST_CASES.map(([css, expected, desc]) => - CssTools.minifyCssAsync(css).then((minifiedCss) => { - test.equal(minifiedCss[0], expected, desc); - }) - ); - return Promise.all(promises); - } -); diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index a4c662e9e5..174452f1ee 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -1,5 +1,6 @@ import path from 'path'; import url from 'url'; +import Future from 'fibers/future'; import postcss from 'postcss'; import cssnano from 'cssnano'; @@ -64,21 +65,23 @@ const CssTools = { * @return {String[]} Array containing the minified CSS. */ minifyCss(cssText) { - return Promise.await(CssTools.minifyCssAsync(cssText)); - }, + const f = new Future; + postcss([ + cssnano({ safe: true }), + ]).process(cssText, { + from: void 0, + }).then(result => { + f.return(result.css); + }).catch(error => { + f.throw(error); + }); + const minifiedCss = f.wait(); - /** - * Minify the passed in CSS string. - * - * @param {string} cssText CSS string to minify. - * @return {Promise} Array containing the minified CSS. - */ - async minifyCssAsync(cssText) { - return await postcss([cssnano({ safe: true })]) - .process(cssText, { - from: void 0, - }) - .then((result) => [result.css]); + // Since this function has always returned an array, we'll wrap the + // minified css string in an array before returning, even though we're + // only ever returning one minified css string in that array (maintaining + // backwards compatibility). + return [minifiedCss]; }, /** @@ -184,7 +187,6 @@ if (typeof Profile !== 'undefined') { 'parseCss', 'stringifyCss', 'minifyCss', - 'minifyCssAsync', 'mergeCssAsts', 'rewriteCssUrls', ].forEach(funcName => { diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 373e5ae579..022ed4c78c 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.2' + version: '1.6.1' }); Npm.depends({ @@ -19,7 +19,6 @@ Package.onTest(function (api) { api.use('tinytest'); api.addFiles([ 'minifier-tests.js', - 'minifier-async-tests.js', 'urlrewriting-tests.js' ], 'server'); }); diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 0c119a8f81..72a51cd67b 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,11 +39,7 @@ export default class Cursor { } /** - * @deprecated in 2.9 - * @summary Returns the number of documents that match a query. This method is - * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); - * see `Collection.countDocuments` and - * `Collection.estimatedDocumentCount` for a replacement. + * @summary Returns the number of documents that match a query. * @memberOf Mongo.Cursor * @method count * @instance diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index 43877fb87e..e3668eeb03 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,14 +39,6 @@ export default class LocalCollection { this.paused = false; } - countDocuments(selector, options) { - return this.find(selector ?? {}, options).countAsync(); - } - - estimatedDocumentCount(options) { - return this.find({}, options).countAsync(); - } - // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 2353ea1305..3b8e47fb2f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.1' + version: '1.9.0' }); Package.onUse(api => { diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index d5b99edae4..3dcc12dc96 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,33 +319,6 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// - /** - * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. - * @locus Anywhere - * @method countDocuments - * @memberof Mongo.Collection - * @instance - * @param {MongoSelector} [selector] A query describing the documents to count - * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. - * @returns {Promise} - */ - countDocuments(...args) { - return this._collection.countDocuments(...args); - }, - - /** - * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. - * @locus Anywhere - * @method estimatedDocumentCount - * @memberof Mongo.Collection - * @instance - * @param {MongoSelector} [selector] A query describing the documents to count - * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. - * @returns {Promise} - */ - estimatedDocumentCount(...args) { - return this._collection.estimatedDocumentCount(...args); - }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index d709cee26c..5d3a277fa0 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,14 +19,3 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); - -['countDocuments', 'estimatedDocumentCount'].forEach(method => { - Tinytest.addAsync(`async collection - ${method}`, async test => { - const collection = new Mongo.Collection(method + test.id); - for (let index = 0; index < 10; ++index) { - test.instanceOf(collection[method](), Promise); - test.equal(await collection[method](), index); - collection.insert({}); - } - }); -}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 7b7b24ec00..98a7017403 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -826,18 +826,6 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; -MongoConnection.prototype.countDocuments = function (collectionName, ...args) { - args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); - const collection = this.rawCollection(collectionName); - return collection.countDocuments(...args); -}; - -MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { - args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); - const collection = this.rawCollection(collectionName); - return collection.estimatedDocumentCount(...args); -}; - MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 43c6e64411..952a37478f 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; +const arrayOperatorKeyRegex = /^(a|u\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -96,9 +96,7 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (position[0] === 's') { - convertOplogDiff(oplogEntry, value, positionKey); - } else if (value === null) { + if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index 79bcbada93..f87c8877f3 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,71 +77,6 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], - [ - { - $v: 2, - diff: { - sitems: { - a: true, - s0: { - u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, - sbio: { u: { en: 'Just Alice' } }, - slanguages: { - a: true, - s0: { - u: { englishName: 'English', key: 'en', localName: 'English' }, - }, - }, - }, - u1: { - id: 'FJwSQHqwpenCN6RQH', - name: 'Bob', - title: { en: 'Fictional character', sv: '' }, - bio: { en: 'Just Bob', sv: '' }, - avatar: null, - languages: [ - { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, - ], - }, - u2: null - }, - }, - }, - { - $v: 2, - $set: { - 'items.0.id': 'm57DsX8g8L66bM5JX', - 'items.0.name': 'Alice', - 'items.0.bio.en': 'Just Alice', - 'items.0.languages.0.englishName': 'English', - 'items.0.languages.0.key': 'en', - 'items.0.languages.0.localName': 'English', - 'items.1': { - id: 'FJwSQHqwpenCN6RQH', - name: 'Bob', - title: { - en: 'Fictional character', - sv: '', - }, - bio: { - en: 'Just Bob', - sv: '', - }, - avatar: null, - languages: [ - { - key: 'sv', - englishName: 'Swedish', - localName: 'Sverige', - }, - ], - }, - }, - $unset: { - 'items.2': true - } - }, - ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index e744c56705..5eb3cebb85 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.3' + version: '1.16.2' }); Npm.depends({ diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index 035af45157..f237879de0 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,28 +4,13 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; -const REMOTE_COLLECTION_METHODS = [ - '_createCappedCollection', - '_dropIndex', - '_ensureIndex', - 'createIndex', - 'countDocuments', - 'dropCollection', - 'estimatedDocumentCount', - 'find', - 'findOne', - 'insert', - 'rawCollection', - 'remove', - 'update', - 'upsert', -]; - Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - REMOTE_COLLECTION_METHODS.forEach( + ['find', 'findOne', 'insert', 'update', 'upsert', + 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', + 'dropCollection', 'rawCollection'].forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index b276e22ce7..11662ebe99 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,224 +62,214 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", - "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", + "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", - "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", + "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" }, "@aws-sdk/client-sso": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", - "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", - "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", + "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" }, "@aws-sdk/client-sts": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", - "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", + "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" }, "@aws-sdk/config-resolver": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", - "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", + "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", - "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", + "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" }, "@aws-sdk/credential-provider-env": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", - "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", + "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", - "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", + "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", - "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", + "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" }, "@aws-sdk/credential-provider-node": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", - "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", + "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" }, "@aws-sdk/credential-provider-process": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", - "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", + "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", - "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", + "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", - "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", + "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" }, "@aws-sdk/credential-providers": { - "version": "3.218.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", - "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", + "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", - "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", + "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" }, "@aws-sdk/hash-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", - "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", + "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" }, "@aws-sdk/invalid-dependency": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", - "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", + "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" }, "@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", + "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" }, "@aws-sdk/middleware-content-length": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", - "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", - "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", + "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" }, "@aws-sdk/middleware-host-header": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", - "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", + "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" }, "@aws-sdk/middleware-logger": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", - "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", + "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", - "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", + "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" }, "@aws-sdk/middleware-retry": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", - "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", + "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", - "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", + "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" }, "@aws-sdk/middleware-serde": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", - "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", + "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" }, "@aws-sdk/middleware-signing": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", - "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" + "version": "3.192.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", + "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" }, "@aws-sdk/middleware-stack": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", - "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", + "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", - "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", + "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" }, "@aws-sdk/node-config-provider": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", - "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", + "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" }, "@aws-sdk/node-http-handler": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", - "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", + "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" }, "@aws-sdk/property-provider": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", - "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", + "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" }, "@aws-sdk/protocol-http": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", - "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", + "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" }, "@aws-sdk/querystring-builder": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", - "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", + "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" }, "@aws-sdk/querystring-parser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", - "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", + "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" }, "@aws-sdk/service-error-classification": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", - "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", + "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", - "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", + "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" }, "@aws-sdk/signature-v4": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", - "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", + "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" }, "@aws-sdk/smithy-client": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", - "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" - }, - "@aws-sdk/token-providers": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", - "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", + "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" }, "@aws-sdk/types": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", - "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", + "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" }, "@aws-sdk/url-parser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", - "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", + "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" }, - "@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" + "@aws-sdk/util-base64-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", + "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" + }, + "@aws-sdk/util-base64-node": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", + "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -287,64 +277,59 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", + "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" }, "@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", + "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" }, "@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", + "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", - "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", + "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", - "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" - }, - "@aws-sdk/util-endpoints": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", - "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", + "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", + "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" }, "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", + "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" }, "@aws-sdk/util-middleware": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", - "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", + "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" }, "@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", + "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", - "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", + "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.215.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", - "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" + "version": "3.190.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", + "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -352,14 +337,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", + "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" }, "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + "version": "18.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", + "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -391,6 +376,11 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -412,14 +402,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", - "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", + "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" }, "mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", + "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" }, "punycode": { "version": "2.1.1", @@ -457,9 +447,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "uuid": { "version": "8.3.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 45d1a87a27..63696bf272 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.12.1', + version: '4.11.0', documentation: null }); Npm.depends({ - mongodb: "4.12.1" + mongodb: "4.11.0" }); Package.onUse(function (api) { diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 1b591a455b..6d7b0cb578 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -136,7 +136,7 @@ OAuth._checkRedirectUrlOrigin = redirectUrl => { ); }; -const middleware = async (req, res, next) => { +const middleware = (req, res, next) => { let requestData; // Make sure to catch any exceptions because otherwise we'd crash @@ -168,7 +168,7 @@ const middleware = async (req, res, next) => { requestData = req.body; } - await handler(service, requestData, res); + handler(service, requestData, res); } catch (err) { // if we got thrown an error, save it off, it will get passed to // the appropriate login call (if any) and reported there. @@ -473,31 +473,3 @@ OAuth.openSecrets = (serviceData, userId) => { ); return result; }; - -OAuth._addValuesToQueryParams = ( - values = {}, - queryParams = new URLSearchParams() -) => { - Object.entries(values).forEach(([key, value]) => { - queryParams.set(key, `${value}`); - }); - return queryParams; -}; - -OAuth._fetch = async ( - url, - method = 'GET', - { headers = {}, queryParams = {}, body, ...options } = {} -) => { - const urlWithParams = new URL(url); - - OAuth._addValuesToQueryParams(queryParams, urlWithParams.searchParams); - - const requestOptions = { - method: method.toUpperCase(), - headers, - ...(body ? { body } : {}), - ...options, - }; - return fetch(urlWithParams.toString(), requestOptions); -}; diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 4b56f43d33..8962aeb282 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.3" + version: "2.1.2" }); Package.onUse(api => { @@ -11,7 +11,6 @@ Package.onUse(api => { api.use(['reload', 'base64'], 'client'); api.use('oauth-encryption', 'server', {weak: true}); - api.use('fetch', 'server'); api.export('OAuth'); diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index 015553611e..aab9629605 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -19,12 +19,12 @@ export class OAuth1Binding { this._urls = urls; } - async prepareRequestToken(callbackUrl) { + prepareRequestToken(callbackUrl) { const headers = this._buildHeader({ oauth_callback: callbackUrl }); - const response = await this._call({method: 'POST', url: this._urls.requestToken, headers}); + const response = this._call('POST', this._urls.requestToken, headers); const tokens = querystring.parse(response.content); if (! tokens.oauth_callback_confirmed) @@ -35,7 +35,7 @@ export class OAuth1Binding { this.requestTokenSecret = tokens.oauth_token_secret; } - async prepareAccessToken(query, requestTokenSecret) { + prepareAccessToken(query, requestTokenSecret) { // support implementations that use request token secrets. This is // read by this._call. // @@ -50,7 +50,7 @@ export class OAuth1Binding { oauth_verifier: query.oauth_verifier }); - const response = await this._call({ method: 'POST', url: this._urls.accessToken, headers }); + const response = this._call('POST', this._urls.accessToken, headers); const tokens = querystring.parse(response.content); if (! tokens.oauth_token || ! tokens.oauth_token_secret) { @@ -66,7 +66,7 @@ export class OAuth1Binding { this.accessTokenSecret = tokens.oauth_token_secret; } - async callAsync(method, url, params, callback) { + call(method, url, params, callback) { const headers = this._buildHeader({ oauth_token: this.accessToken }); @@ -75,29 +75,14 @@ export class OAuth1Binding { params = {}; } - return this._call({ method, url, headers, params, callback }); - } - - async getAsync(url, params, callback) { - return this.callAsync('GET', url, params, callback); - } - - async postAsync(url, params, callback) { - return this.callAsync('POST', url, params, callback); - } - - call(method, url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. - return Promise.await(this.callAsync(method, url, params, callback)); + return this._call(method, url, headers, params, callback); } get(url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. return this.call('GET', url, params, callback); } post(url, params, callback) { - // Require changes when remove Fibers. Exposed to public api. return this.call('POST', url, params, callback); } @@ -133,7 +118,7 @@ export class OAuth1Binding { return crypto.createHmac('SHA1', signingKey).update(signatureBase).digest('base64'); }; - async _call({method, url, headers = {}, params = {}, callback}) { + _call(method, url, headers = {}, params = {}, callback) { // all URLs to be functions to support parameters/customization if(typeof url === "function") { url = url(this); @@ -156,52 +141,29 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); + // Make signed request - return OAuth._fetch(url, method, { - headers: { - Authorization: authString, - ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}) - }, - ...(method.toUpperCase() === 'POST' ? - { body: OAuth._addValuesToQueryParams(params).toString() } - : { queryParams: params }) - }).then((res) => - res.text().then((content) => { - const responseHeaders = Array.from(res.headers.entries()).reduce( - (acc, [key, val]) => { - return { ...acc, [key.toLowerCase()]: val }; - }, - {} - ); - const data = responseHeaders['content-type'].includes('application/json') ? - JSON.parse(content) : undefined; - return { - content: data ? '' : content, - data, - headers: { ...responseHeaders, nonce: headers.oauth_nonce }, - redirected: res.redirected, - ok: res.ok, - statusCode: res.status, - }; - }) - ) - .then((response) => { - if (callback) { - callback(undefined, response); + try { + const response = HTTP.call(method, url, { + params, + headers: { + Authorization: authString } - return response; - }) - .catch((err) => { - if (callback) { - callback(err); + }, callback && ((error, response) => { + if (! error) { + response.nonce = headers.oauth_nonce; } - console.log({ err }); - throw Object.assign( - new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), - { response: err.response } - ); - }); - } + callback(error, response); + })); + // We store nonce so that JWTs can be validated + if (response) + response.nonce = headers.oauth_nonce; + return response; + } catch (err) { + throw Object.assign(new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), + {response: err.response}); + } + }; _encodeHeader(header) { return Object.keys(header).reduce((memo, key) => { diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index d0c8e3732a..eb54458825 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -6,7 +6,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel Object.assign( redirectUrlObj.query, - whitelistedQueryParams.reduce((prev, param) => + whitelistedQueryParams.reduce((prev, param) => params.query[param] ? { ...prev, param: params.query[param] } : prev, {} ), @@ -25,7 +25,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel }; // connect middleware -OAuth._requestHandlers['1'] = async (service, query, res) => { +OAuth._requestHandlers['1'] = (service, query, res) => { const config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); if (! config) { throw new ServiceConfiguration.ConfigError(service.serviceName); @@ -45,7 +45,7 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { }); // Get a request token to start auth process - await oauthBinding.prepareRequestToken(callbackUrl); + oauthBinding.prepareRequestToken(callbackUrl); // Keep track of request token so we can verify it on the next step OAuth._storeRequestToken( @@ -91,10 +91,10 @@ OAuth._requestHandlers['1'] = async (service, query, res) => { // subsequent call to the `login` method will be immediate. // Get the access token for signing requests - await oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); + oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); // Run service-specific handler. - const oauthResult = await service.handleOauthRequest( + const oauthResult = service.handleOauthRequest( oauthBinding, { query: query }); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index d4b283a97a..a9f266af02 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -1,7 +1,7 @@ import http from 'http'; import { OAuth1Binding } from './oauth1_binding'; -const testPendingCredential = async (test, method) => { +const testPendingCredential = (test, method) => { const twitterfooId = Random.id(); const twitterfooName = `nickname${Random.id()}`; const twitterfooAccessToken = Random.id(); @@ -17,8 +17,8 @@ const testPendingCredential = async (test, method) => { authenticate: "https://example.com/oauth/authenticate" }; - OAuth1Binding.prototype.prepareRequestToken = async () => {}; - OAuth1Binding.prototype.prepareAccessToken = async function() { + OAuth1Binding.prototype.prepareRequestToken = () => {}; + OAuth1Binding.prototype.prepareAccessToken = function() { this.accessToken = twitterfooAccessToken; this.accessTokenSecret = twitterfooAccessTokenSecret; }; @@ -27,7 +27,7 @@ const testPendingCredential = async (test, method) => { try { // register a fake login service - OAuth.registerService(serviceName, 1, urls, async query => ({ + OAuth.registerService(serviceName, 1, urls, query => ({ serviceData: { id: twitterfooId, screenName: twitterfooName, @@ -71,7 +71,7 @@ const testPendingCredential = async (test, method) => { respData += args[0]; return end.apply(this, arguments); }; - await OAuthTest.middleware(req, res); + OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -94,17 +94,17 @@ const testPendingCredential = async (test, method) => { } }; -Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { +Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { OAuthEncryption.loadKey(null); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); }); -Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { +Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 7435caf024..550fdc2448 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.1", + version: "1.5.0", }); Package.onUse(api => { @@ -8,7 +8,10 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('check', 'server'); + api.use([ + 'check', + 'http@1.4.4 || 2.0.0' + ], 'server'); api.use('mongo'); diff --git a/packages/oauth2/oauth2_server.js b/packages/oauth2/oauth2_server.js index 86eead93ba..cf990d8691 100644 --- a/packages/oauth2/oauth2_server.js +++ b/packages/oauth2/oauth2_server.js @@ -1,5 +1,5 @@ // connect middleware -OAuth._requestHandlers['2'] = async (service, query, res) => { +OAuth._requestHandlers['2'] = (service, query, res) => { let credentialSecret; // check if user authorized access @@ -7,7 +7,7 @@ OAuth._requestHandlers['2'] = async (service, query, res) => { // Prepare the login results before returning. // Run service-specific handler. - const oauthResult = await service.handleOauthRequest(query); + const oauthResult = service.handleOauthRequest(query); credentialSecret = Random.secret(); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth2/oauth2_tests.js b/packages/oauth2/oauth2_tests.js index 49b94f4eb0..1ce47813b4 100644 --- a/packages/oauth2/oauth2_tests.js +++ b/packages/oauth2/oauth2_tests.js @@ -1,6 +1,6 @@ import http from 'http'; -const testPendingCredential = async function (test, method) { +const testPendingCredential = function (test, method) { const foobookId = Random.id(); const foobookOption1 = Random.id(); const credentialToken = Random.id(); @@ -51,7 +51,7 @@ const testPendingCredential = async function (test, method) { return end.apply(this, args); }; - await OAuthTest.middleware(req, res); + OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -72,17 +72,17 @@ const testPendingCredential = async function (test, method) { } }; -Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { +Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { OAuthEncryption.loadKey(null); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); }); -Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { +Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - await testPendingCredential(test, "GET"); - await testPendingCredential(test, "POST"); + testPendingCredential(test, "GET"); + testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index 4ba099aa41..c5f2fd0917 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.2", + version: "1.3.1", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index ff82ae9086..855dc56057 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - invalidVersions.forEach(function (v) { + _.each(invalidVersions, function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - validVersions.forEach(function (v) { + _.each(validVersions, function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 78a084498d..4c6ff0dc62 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.1" + version: "3.2.0" }); Npm.depends({ @@ -14,6 +14,7 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use(['package-version-parser', 'tinytest']); + api.use('package-version-parser'); + api.use(['tinytest', 'underscore']); api.addFiles('package-version-parser-tests.js', 'server'); }); diff --git a/packages/promise/package.js b/packages/promise/package.js index fcf72881c5..181ef21b3b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.2", + version: "0.12.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/promise/server.js b/packages/promise/server.js index 2f5f59a3c0..e07faeb52b 100644 --- a/packages/promise/server.js +++ b/packages/promise/server.js @@ -1,13 +1,11 @@ require("./extensions.js"); -if (!process.env.DISABLE_FIBERS) { - require("meteor-promise").makeCompatible( - Promise, - // Allow every Promise callback to run in a Fiber drawn from a pool of - // reusable Fibers. - require("fibers") - ); -} +require("meteor-promise").makeCompatible( + Promise, + // Allow every Promise callback to run in a Fiber drawn from a pool of + // reusable Fibers. + require("fibers") +); // Reference: https://caniuse.com/#feat=promises require("meteor/modern-browsers").setMinimumBrowserVersions({ diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 7d6b2746e9..97e0d8f3eb 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.3', + version: '1.8.2', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/standard-minifier-css/plugin/minify-css.js b/packages/standard-minifier-css/plugin/minify-css.js index 8ac2b0db75..2b8c4d5e44 100644 --- a/packages/standard-minifier-css/plugin/minify-css.js +++ b/packages/standard-minifier-css/plugin/minify-css.js @@ -60,7 +60,7 @@ class CssToolsMinifier { path: 'merged-stylesheets.css' }]; } else { - const minifiedFiles = await CssTools.minifyCssAsync(merged.code); + const minifiedFiles = CssTools.minifyCss(merged.code); result = minifiedFiles.map(minified => ({ data: minified diff --git a/packages/test-helpers/async_multi.js b/packages/test-helpers/async_multi.js index 04be6aedfe..e5ec3cb43c 100644 --- a/packages/test-helpers/async_multi.js +++ b/packages/test-helpers/async_multi.js @@ -142,13 +142,8 @@ testAsyncMulti = function (name, funcs, { isOnly = false } = {}) { test.extraDetails.asyncBlock = i++; new Promise(resolve => { - const result = func.apply(context, [test, _.bind(em.expect, em)]); - if (result && typeof result.then === "function") { - return result.then((r) => resolve(r)) - } - - return resolve(result); - }).then(() => { + resolve(func.apply(context, [test, _.bind(em.expect, em)])); + }).then(result => { em.done(); }, exception => { if (em.cancel()) { @@ -196,24 +191,3 @@ pollUntil = function (expect, f, timeout, step, noFail) { step ); }; - -/** - * Helper that is used on the async tests. - * Just run the function and assert if we have an error or not. - * @param fn - * @param test - * @param shouldErrorOut - * @returns {Promise<*>} - */ -runAndThrowIfNeeded = async (fn, test, shouldErrorOut) => { - let err, result; - try { - result = await fn(); - } catch (e) { - err = e; - } - - test[shouldErrorOut ? "isTrue" : "isFalse"](err); - - return result; -}; diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 399e768cbe..17b6e0f37a 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.1' + version: '1.3.0' }); Package.onUse(function (api) { @@ -28,8 +28,7 @@ Package.onUse(function (api) { 'SeededRandom', 'clickElement', 'blurElement', 'focusElement', 'simulateEvent', 'getStyleProperty', 'canonicalizeHtml', 'renderToDiv', 'clickIt', - 'withCallbackLogger', 'testAsyncMulti', - 'simplePoll', 'runAndThrowIfNeeded', + 'withCallbackLogger', 'testAsyncMulti', 'simplePoll', 'makeTestConnection', 'DomUtils']); api.addFiles('try_all_permutations.js'); diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index b8fb0a9ecf..d0d5fa4423 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e.type != "finish"; + return e[type] != "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); +}); \ No newline at end of file diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 57e3474024..a090172f76 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.2', + version: '1.3.1', documentation: null }); diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index c6509bd93d..a2d07f633f 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,16 +1,12 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); -let testNumber = 0; - async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - // this is a way to make sure the travis does not timeout - // if the test is running for too long without any output to the console (10 minutes) - if (msg._text !== undefined) console.log(msg._text); - else console.log(`Test number: ${ testNumber }`); - testNumber++; + if (msg._text !== undefined) { + console.log(msg._text); + } }); if (!process.env.URL) { @@ -23,15 +19,11 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(` - The number of tests from Test number may be different because - of the way the test is written. causing the test to fail or - to run more than once. in the console. Test number total: ${ testNumber }`); - console.log(`Tests complete with ${ failCount } failures`); - console.log(`Tests complete with ${ await getPassCount(page) } passes`); + console.log(`Tests complete with ${failCount} failures`); + console.log(`Tests complete with ${await getPassCount(page)} passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); + failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); await page.close(); await browser.close(); process.exit(1); @@ -54,7 +46,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -69,7 +61,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -84,7 +76,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -103,7 +95,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function () { + return await page.evaluate(function() { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -112,11 +104,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${ process.env.URL }`); + console.log(`Running test with Puppeteer at ${process.env.URL}`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${ await browser.version() }`); + console.log(`Using version: ${await browser.version()}`); runNextUrl(browser); } diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 21a7a053f3..862749494b 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.2' + version: '1.2.1' }); Package.onUse(function (api) { diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index f5cd025b98..045548c6de 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -1,3 +1,5 @@ +const Future = Meteor.isServer && require('fibers/future'); + /******************************************************************************/ /* TestCaseResults */ /******************************************************************************/ @@ -184,43 +186,6 @@ export class TestCaseResults { this.ok(); } - _assertActual(actual, predicate, message) { - if (actual && predicate(actual)) - this.ok(); - else - this.fail({ - type: "throws", - message: (actual ? - "wrong error thrown: " + actual.message : - "did not throw an error as expected") + (message ? ": " + message : ""), - }); - } - - _guessPredicate(expected) { - let predicate; - - if (expected === undefined) { - predicate = function () { - return true; - }; - } else if (typeof expected === "string") { - predicate = function (actual) { - return typeof actual.message === "string" && - actual.message.indexOf(expected) !== -1; - }; - } else if (expected instanceof RegExp) { - predicate = function (actual) { - return expected.test(actual.message); - }; - } else if (typeof expected === 'function') { - predicate = expected; - } else { - throw new Error('expected should be a string, regexp, or predicate function'); - } - - return predicate; - } - // expected can be: // undefined: accept any exception. // string: pass if the string is a substring of the exception message. @@ -239,8 +204,26 @@ export class TestCaseResults { // particular class, use a predicate function. // throws(f, expected, message) { - let actual; - const predicate = this._guessPredicate(expected); + var actual, predicate; + + if (expected === undefined) { + predicate = function (actual) { + return true; + }; + } else if (typeof expected === "string") { + predicate = function (actual) { + return typeof actual.message === "string" && + actual.message.indexOf(expected) !== -1; + }; + } else if (expected instanceof RegExp) { + predicate = function (actual) { + return expected.test(actual.message); + }; + } else if (typeof expected === 'function') { + predicate = expected; + } else { + throw new Error('expected should be a string, regexp, or predicate function'); + } try { f(); @@ -248,27 +231,15 @@ export class TestCaseResults { actual = exception; } - this._assertActual(actual, predicate, message); - } - - /** - * Same as throw, but accepts an async function as a parameter. - * @param f - * @param expected - * @param message - * @returns {Promise} - */ - async throwsAsync(f, expected, message) { - let actual; - const predicate = this._guessPredicate(expected); - - try { - await f(); - } catch (exception) { - actual = exception; - } - - this._assertActual(actual, predicate, message); + if (actual && predicate(actual)) + this.ok(); + else + this.fail({ + type: "throws", + message: (actual ? + "wrong error thrown: " + actual.message : + "did not throw an error as expected") + (message ? ": " + message : ""), + }); } isTrue(v, msg) { @@ -338,7 +309,7 @@ export class TestCaseResults { pass = true; } } else { - /* fail -- not something that contains other things */ + /* fail -- not something that contains other things */; } if (pass === ! not) { @@ -575,37 +546,37 @@ export class TestRun { } if (Meteor.isServer) { + // On the server, ensure that only one test runs at a time, even + // with multiple clients. this.manager.testQueue.queueTask(() => { - // On the server, ensure that only one test runs at a time, even - // with multiple clients. - let hasRan = false; - const timeoutPromise = new Promise((resolve) => { - Meteor.setTimeout(() => { - if (!hasRan) { - test.timedOut = true; - this._report(test, { - type: "exception", - details: { - message: "test timed out" - } - }); - } - - resolve(); - }, 3 * 60 * 1000); - }); - const runnerPromise = new Promise((resolve) => { - this._runTest(test, () => { - if (!hasRan) { - hasRan = true; - } - resolve(); - }, stop_at_offset); - }); - - Promise.race([runnerPromise, timeoutPromise]).finally(() => { - onComplete && onComplete(); - }); + // The future resolves when the test completes or times out. + var future = new Future(); + Meteor.setTimeout( + () => { + if (future.isResolved()) + // If the future has resolved the test has completed. + return; + test.timedOut = true; + this._report(test, { + type: "exception", + details: { + message: "test timed out" + } + }); + future['return'](); + }, + 3 * 60 * 1000 // 3 minutes + ); + this._runTest(test, () => { + // The test can complete after it has timed out (it might + // just be slow), so only resolve the future if the test + // hasn't timed out. + if (! future.isResolved()) + future['return'](); + }, stop_at_offset); + // Wait for the test to complete or time out. + future.wait(); + onComplete && onComplete(); }); } else { // client diff --git a/packages/tinytest/tinytest_server.js b/packages/tinytest/tinytest_server.js index 331a7007e7..c43fb12b34 100644 --- a/packages/tinytest/tinytest_server.js +++ b/packages/tinytest/tinytest_server.js @@ -9,7 +9,7 @@ import { export { Tinytest }; -const Fiber = Meteor._isFibersEnabled && require('fibers'); +const Fiber = require('fibers'); const handlesForRun = new Map; const reportsForRun = new Map; @@ -58,7 +58,7 @@ Meteor.methods({ } function onReport(report) { - if (Fiber && !Fiber.current) { + if (! Fiber.current) { Meteor._debug("Trying to report a test not in a fiber! "+ "You probably forgot to wrap a callback in bindEnvironment."); console.trace(); diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 62d7646ca8..6a8bd6793b 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.2' + version: '1.3.1' }); Package.onUse(function(api) { diff --git a/packages/twitter-oauth/twitter_server.js b/packages/twitter-oauth/twitter_server.js index 090d455172..6a973ac57d 100644 --- a/packages/twitter-oauth/twitter_server.js +++ b/packages/twitter-oauth/twitter_server.js @@ -15,9 +15,9 @@ var urls = { // https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials Twitter.whitelistedFields = ['profile_image_url', 'profile_image_url_https', 'lang', 'email']; -OAuth.registerService('twitter', 1, urls, async function(oauthBinding) { - const response = await oauthBinding.getAsync('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true'); - const { data: identity } = response; +OAuth.registerService('twitter', 1, urls, function(oauthBinding) { + var identity = oauthBinding.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true').data; + var serviceData = { id: identity.id_str, screenName: identity.screen_name, diff --git a/packages/typescript/package.js b/packages/typescript/package.js index 21db263e8c..df071432b9 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.6.4', + version: '4.5.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index e2de8dd3ba..02cea0b9c6 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,12 +1,13 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.2", + version: "1.3.1", }); Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); + api.use('http@1.4.4 || 2.0.0', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); diff --git a/packages/weibo-oauth/weibo_server.js b/packages/weibo-oauth/weibo_server.js index 24d56438fd..539022aa8d 100644 --- a/packages/weibo-oauth/weibo_server.js +++ b/packages/weibo-oauth/weibo_server.js @@ -1,8 +1,8 @@ Weibo = {}; -OAuth.registerService('weibo', 2, null, async query => { +OAuth.registerService('weibo', 2, null, query => { - const response = await getTokenResponse(query); + const response = getTokenResponse(query); const uid = parseInt(response.uid, 10); // different parts of weibo's api seem to expect numbers, or strings @@ -11,7 +11,7 @@ OAuth.registerService('weibo', 2, null, async query => { throw new Error(`Expected 'uid' to parse to an integer: ${JSON.stringify(response)}`); } - const identity = await getIdentity(response.access_token, uid); + const identity = getIdentity(response.access_token, uid); return { serviceData: { @@ -31,48 +31,46 @@ OAuth.registerService('weibo', 2, null, async query => { // - uid // - access_token // - expires_in: lifetime of this token in seconds (5 years(!) right now) -const getTokenResponse = async (query) => { - const config = ServiceConfiguration.configurations.findOne({ - service: 'weibo', - }); - if (!config) throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = query => { + const config = ServiceConfiguration.configurations.findOne({service: 'weibo'}); + if (!config) + throw new ServiceConfiguration.ConfigError(); - return OAuth._fetch('https://api.weibo.com/oauth2/access_token', 'POST', { - queryParams: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('weibo', config, null, { - replaceLocalhost: true, - }), - grant_type: 'authorization_code', - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error( - `Failed to complete OAuth handshake with Weibo. ${err.message}` - ), - { response: err.response } - ); - }); + let response; + try { + response = HTTP.post( + "https://api.weibo.com/oauth2/access_token", {params: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('weibo', config, null, {replaceLocalhost: true}), + grant_type: 'authorization_code' + }}); + } catch (err) { + throw Object.assign(new Error(`Failed to complete OAuth handshake with Weibo. ${err.message}`), + {response: err.response}); + } + + // result.headers["content-type"] is 'text/plain;charset=UTF-8', so + // the http package doesn't automatically populate result.data + response.data = JSON.parse(response.content); + + if (response.data.error) { // if the http response was a json object with an error attribute + throw new Error(`Failed to complete OAuth handshake with Weibo. ${response.data.error}`); + } else { + return response.data; + } }; -const getIdentity = async (accessToken, userId) => { - return OAuth._fetch('https://api.weibo.com/2/users/show.json', 'GET', { - queryParams: { - access_token: accessToken, - uid: userId, - }, - }) - .then((res) => res.json()) - .catch((err) => { - throw Object.assign( - new Error('Failed to fetch identity from Weibo. ' + err.message), - { response: err.response } - ); - }); +const getIdentity = (accessToken, userId) => { + try { + return HTTP.get( + "https://api.weibo.com/2/users/show.json", + {params: {access_token: accessToken, uid: userId}}).data; + } catch (err) { + throw Object.assign(new Error("Failed to fetch identity from Weibo. " + err.message), + {response: err.response}); + } }; Weibo.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index acce35a806..e475269aa6 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.8.1-rc.0", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 27a0c865e4..f5d6c4d09d 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.9.0", + "version": "2.8.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c265734f8a..ce78281faa 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.2-beta.0", + "@meteorjs/babel": "7.16.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 6a5c4d071c..2c8f3ff4e2 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); + main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 22ffdebaeb..4a726cb3f3 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -12,13 +12,6 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; -const { - blue, - green, - purple, - red, - yellow -} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -540,14 +533,12 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, - 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, - prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -556,13 +547,7 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - if (options.prototype) { - Console.error( - `The ${Console.command('--prototype')} option is no longer supported for packages.` - ); - Console.error(); - throw new main.ShowUsage; - } + if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); @@ -805,22 +790,6 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { - - // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file - if ((/packages/).test(f)) { - - const prototypePackages = - () => - 'autopublish # Publish all data to the clients (for prototyping)\n' + - 'insecure # Allow all DB writes from clients (for prototyping)'; - - // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else - if (options.prototype) { - return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) - } else { - return Buffer.from(contents.toString().replace(/~prototype~/g, '')) - } - } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { @@ -936,8 +905,7 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue3-based app"); - cmd("meteor create --vue-2 # to create a basic Vue2-based app"); + cmd("meteor create --vue # to create a basic Vue-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); @@ -2540,298 +2508,6 @@ main.registerCommand({ }); -/////////////////////////////////////////////////////////////////////////////// -// generate -/////////////////////////////////////////////////////////////////////////////// - -/** - * - * @param question - * @returns {function(string): Promise} - */ -const createPrompt = () => { - const readline = require('readline') - .createInterface({ input: process.stdin, output: process.stdout }); - return async (question) => new Promise((resolve, reject) => { - readline.question(question, (answer) => { - resolve(answer); - }) - }) -} - -const sanitizeBoolAnswer = (string) => { - if (string === '') return true; - - if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; - - if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; - - Console.error(red('You must provide a valid answer')); - Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); - throw new main.ExitWithCode(2); -} - -/** - * simple verification for the name - * @param scaffoldName {string} - */ -const checkScaffoldName = (scaffoldName) => { - if (scaffoldName === '') { - Console.error(red('You must provide a name for your model.')); - Console.error(yellow('Model names should not be empty.')); - throw new main.ExitWithCode(2); - } - - if (scaffoldName.includes('/')) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Model names should not contain slashes.')); - throw new main.ExitWithCode(2); - } - - const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - - if (allNonWordRegex.test(scaffoldName)) { - Console.error(red('You must provide a valid name for your model.')); - Console.error(yellow('Model names should not contain special characters except _ and -')); - throw new main.ExitWithCode(2); - } -} - -main.registerCommand({ - name: 'generate', - maxArgs: 1, - minArgs: 0, - options: { - path: { type: String }, - methods: { type: Boolean }, - publications: { type: Boolean }, - templatePath : { type: String }, - replaceFn : { type: String }, - }, - pretty: false, - catalogRefresh: new catalog.Refresh.Never() -}, async function (options) { - const { args, appDir } = options; - - const setup = async (arg0) => { - if (arg0 === undefined) { - const ask = createPrompt(); - // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors - const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); - checkScaffoldName(scaffoldName); - const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); - const methods = sanitizeBoolAnswer(areMethods); - const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); - const publications = sanitizeBoolAnswer(arePublications); - const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); - return { - isWizard: true, - scaffoldName, - path, - methods, - publications, - } - } - - const { - path, - methods, - publications - } = options; - - return { - isWizard: false, - scaffoldName: arg0, - path, - methods, - publications, - } - } - /** - * @type{string} - */ - const { - isWizard, - scaffoldName, - path, - methods, - publications - } = await setup(args[0]); - - checkScaffoldName(scaffoldName); - // get directory where we will place our files - const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; - - /** - * - * @param appDir - * @returns {string[]} - */ - const getFilesInDir = (appDir) => { - const appPath = files.pathResolve(appDir); - return files.readdir(appPath); - } - - const getExtension = () => { - const rootFiles = getFilesInDir(appDir); - if (rootFiles.includes('tsconfig.json')) return 'ts' - else return 'js' - } - - /** - * - * @returns {string} - */ - const userTransformFilenameFn = (filename) => { - const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); - const replaceFn = require(path).transformFilename; - if (typeof replaceFn !== 'function') { - Console.error(red('You must provide a valid function transformFilename.')); - Console.error(yellow('The function should be named transformFilename and should be exported.')); - throw new main.ExitWithCode(2); - } - return replaceFn(scaffoldName, filename); - } - /** - * - * @returns {string} - */ - const userTransformContentsFn = (contents, fileName) => { - const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); - const replaceFn = require(path).transformContents; - if (typeof replaceFn !== 'function') { - Console.error(red('You must provide a valid function transformContents.')); - Console.error(yellow('The function should be named transformContents and should be exported.')); - throw new main.ExitWithCode(2); - } - return replaceFn(scaffoldName, contents, fileName); - } - - /** - * if contains - turns into pascal - * @param str{string} - * @returns {string} - */ - const toPascalCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); - } - const toCamelCase = (str) => { - if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); - else return str.split('-').map(toPascalCase).join(''); - } - - /** - * - * @param name {string} - */ - const transformName = (name) => { - return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { - if (substring === '$$name$$') return scaffoldName; - if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); - if (substring === '$$camelName$$') return toCamelCase(scaffoldName); - }) - } - - /** - * - * @param content{string} - * @param fileName{string} - * @returns {string} - */ - const removeUnusedLines = (content, fileName) => { - if (methods && publications) return content; - if (!methods && !publications) return content; - if(!fileName.startsWith('index')) return content; - return content - .split('\n') - .filter(line => { - if (!methods && line.includes('methods')) return false; - if (!publications && line.includes('publications')) return false; - return true; - }) - .join('\n'); - } - /// Program - const rootFiles = getFilesInDir(appDir); - if (!rootFiles.includes('.meteor')) { - Console.error(red('You must be in a Meteor project to run this command')); - Console.error(yellow('You can create a new Meteor project with `meteor create`')); - throw new main.ExitWithCode(2); - } - - const extension = getExtension() - const assetsPath = () => { - if (options.templatePath){ - const templatePath = files.pathJoin(appDir, options.templatePath) - Console.info(`Using template that is in: ${purple(templatePath)}`) - return templatePath; - } - return files.pathJoin( - __dirnameConverted, - '..', - 'static-assets', - `scaffolds-${ extension }`) - } - // create directory - const isOk = files.mkdir_p(scaffoldPath); - if (!isOk) { - Console.error(red('Something went wrong when creating the folder')); - Console.error(yellow('Do you have the correct permissions?')); - throw new main.ExitWithCode(2); - } - - files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { - transformFilename: function (f) { - if (options.replaceFn) return userTransformFilenameFn(f); - return transformName(f); - }, - transformContents: function (contents, fileName) { - if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); - const cleaned = removeUnusedLines(contents.toString(), fileName); - return transformName(cleaned); - } - }) - - const checkAndRemoveFiles = () => { - if (!methods) - files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); - - if (!publications) - files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); - } - - const xor = (a, b) => ( a || b ) && !( a && b ); - - if (!isWizard && xor(methods, publications)) { - checkAndRemoveFiles() - } - - if (isWizard) { - checkAndRemoveFiles() - } - - const packageJsonPath = files.pathJoin(appDir, 'package.json'); - const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); - const packageJson = JSON.parse(packageJsonFile); - - const mainJsPath = - packageJson?.meteor?.mainModule?.server - ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) - : files.pathJoin(appDir, 'server', 'main.js'); - const mainJs = files.readFile(mainJsPath); - const mainJsLines = mainJs.toString().split('\n'); - const importLine = path - ? `import '${path}';` - : `import '/imports/api/${ scaffoldName }';` - const mainJsFile = [importLine, ...mainJsLines].join('\n'); - files.writeFile(mainJsPath, mainJsFile); - - Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); - - return 0; -}); - - /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 71b63daf23..8091e7b025 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,8 +183,7 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue3-based app. - --vue-2 Create a basic vue2-based app. + --vue Create a basic vue-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. @@ -192,7 +191,6 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. - --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update @@ -843,34 +841,6 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` ->>> generate - -Generate boilerplate code for a MeteorJS RPC api. -It generates a collection with the name you pass and its methods. -Is JS and TS compatible. No collection name -runs the wizard. - -Usage: meteor generate [] [options] - -By default, generates a collection.ts|js file with the name you pass, -methods(insert, update, remove, find, findOne) in a methods.js|ts file -and publications.js|ts. If you just use the command without collectionName, -it will generate run the wizard, asking you what is necessary. - -We do have as well the templatePath, wich uses the template you pass to generate -the boilerplate code. You can use the default template or create your own. -for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. - -This is a MeteorJS project command. - -Options: - --help Show help. - --path The path to the folder where the files will be generated. Default is the current folder. - --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. - --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. - --methods Generate methods. - --publications Generate publications. - >>> publish-release Publish a new meteor release to the package server. diff --git a/tools/console/console.js b/tools/console/console.js index 7715560354..16ebd55da9 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,19 +1320,4 @@ class Console extends ConsoleBase { } } -const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; -const red = (text) => `\x1b[31m${ text }\x1b[0m`; -const purple = (text) => `\x1b[35m${ text }\x1b[0m`; -const green = (text) => `\x1b[32m${ text }\x1b[0m`; -const blue = (text) => `\x1b[34m${ text }\x1b[0m`; - -const colors = { - yellow, - red, - purple, - green, - blue, -}; - -exports.colors = colors; exports.Console = new Console; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 3075970647..78af222cfd 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,6 +809,7 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. + // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index 1884abb1d6..db232e18af 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,14 +40,6 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. -## skel-vue - Package Skeleton - -Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. - -## skel-vue-2 - Package Skeleton - -Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. - ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js deleted file mode 100644 index a8a92d7cde..0000000000 --- a/tools/static-assets/scaffolds-js/collection.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js deleted file mode 100644 index 59951d14bb..0000000000 --- a/tools/static-assets/scaffolds-js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './collection'; -export * from './methods'; -export * from './publications'; diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js deleted file mode 100644 index 415f0ebb0a..0000000000 --- a/tools/static-assets/scaffolds-js/methods.js +++ /dev/null @@ -1,29 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; -import { $$PascalName$$Collection } from './collection'; - -export async function create(data) { - return $$PascalName$$Collection.insertAsync({ ...data }); -} - -export async function update(_id, data) { - check(_id, String); - return $$PascalName$$Collection.updateAsync(_id, { ...data }); -} - -export async function remove(_id) { - check(_id, String); - return $$PascalName$$Collection.removeAsync(_id); -} - -export async function findById(_id) { - check(_id, String); - return $$PascalName$$Collection.findOneAsync(_id); -} - -Meteor.methods({ - '$$PascalName$$.create': create, - '$$PascalName$$.update': update, - '$$PascalName$$.remove': remove, - '$$PascalName$$.find': findById -}); diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js deleted file mode 100644 index 7e3a996634..0000000000 --- a/tools/static-assets/scaffolds-js/publications.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { $$PascalName$$Collection } from './collection'; - -Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { - return $$PascalName$$Collection.find({}); -}); diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts deleted file mode 100644 index f579cd71a2..0000000000 --- a/tools/static-assets/scaffolds-ts/collection.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Mongo } from 'meteor/mongo'; - -export type $$PascalName$$ = { - _id?: string; - name: string; - createdAt: Date; -} - -export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts deleted file mode 100644 index 59951d14bb..0000000000 --- a/tools/static-assets/scaffolds-ts/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './collection'; -export * from './methods'; -export * from './publications'; diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts deleted file mode 100644 index d36e1cd42c..0000000000 --- a/tools/static-assets/scaffolds-ts/methods.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Mongo } from 'meteor/mongo'; -import { check } from 'meteor/check'; -import { $$PascalName$$, $$PascalName$$Collection } from './collection'; - -export async function create(data: $$PascalName$$) { - return $$PascalName$$Collection.insertAsync({ ...data }); -} - -export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { - check(_id, String); - return $$PascalName$$Collection.updateAsync(_id, { ...data }); -} - -export async function remove(_id: string) { - check(_id, String); - return $$PascalName$$Collection.removeAsync(_id); -} - -export async function findById(_id: string) { - check(_id, String); - return $$PascalName$$Collection.findOneAsync(_id); -} - -Meteor.methods({ - '$$PascalName$$.create': create, - '$$PascalName$$.update': update, - '$$PascalName$$.remove': remove, - '$$PascalName$$.find': findById -}); diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts deleted file mode 100644 index 818932bba3..0000000000 --- a/tools/static-assets/scaffolds-ts/publications.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Meteor, Subscription } from 'meteor/meteor'; -import { $$PascalName$$Collection } from './collection'; - -Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { - return $$PascalName$$Collection.find({}); -}); diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index 0addfea192..caa775ee6f 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ + static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 294120e852..62bedd2c00 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library -~prototype~ + standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index 5e929125ff..c2506a81ed 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,7 +19,8 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 42dd3fa370..8f6a2ce1df 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,7 +11,6 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library -~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index d0998cd7ad..60ed1976b3 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,4 +15,3 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server -~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index 492b563f76..d6c05d244b 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 6880ea240a..0e3c38c047 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,7 +16,8 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 90ce4b06dd..72de92e77b 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,6 +17,7 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -~prototype~ +autopublish # Publish all data to the clients (for prototyping) +insecure # Allow all DB writes from clients (for prototyping) static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index 76457880f7..c7c54d5cc4 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.4" + "typescript": "^4.6.3" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-vue-2/.gitignore b/tools/static-assets/skel-vue-2/.gitignore deleted file mode 100644 index c2658d7d1b..0000000000 --- a/tools/static-assets/skel-vue-2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/tools/static-assets/skel-vue-2/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore deleted file mode 100644 index 4083037423..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/tools/static-assets/skel-vue-2/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages deleted file mode 100644 index 83be6b3a62..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/packages +++ /dev/null @@ -1,24 +0,0 @@ -# Meteor packages used by this project, one per line. -# Check this file (and the other files in this directory) into your repository. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -meteor-base # Packages every Meteor app needs to have -mobile-experience # Packages for a great mobile UX -mongo # The database Meteor supports right now -reactive-var # Reactive variable for tracker - -standard-minifier-css # CSS minifier run for production mode -standard-minifier-js # JS minifier run for production mode -es5-shim # ECMAScript 5 compatibility for older browsers -ecmascript # Enable ECMAScript2015+ syntax in app code -typescript # Enable TypeScript syntax in .ts and .tsx modules -shell-server # Server-side component of the `meteor shell` command - -tracker # Dependency tracker to allow reactive callbacks -static-html # Define static page content in .html files -akryum:vue-component # Vue-CLI template to publish components - -meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha -johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue-2/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms deleted file mode 100644 index efeba1b50c..0000000000 --- a/tools/static-assets/skel-vue-2/.meteor/platforms +++ /dev/null @@ -1,2 +0,0 @@ -server -browser diff --git a/tools/static-assets/skel-vue-2/client/main.html b/tools/static-assets/skel-vue-2/client/main.html deleted file mode 100644 index 99c3dfb74c..0000000000 --- a/tools/static-assets/skel-vue-2/client/main.html +++ /dev/null @@ -1,7 +0,0 @@ - - ~name~ - - - -
- diff --git a/tools/static-assets/skel-vue-2/client/main.js b/tools/static-assets/skel-vue-2/client/main.js deleted file mode 100644 index 665c6aa1b1..0000000000 --- a/tools/static-assets/skel-vue-2/client/main.js +++ /dev/null @@ -1,12 +0,0 @@ -import Vue from 'vue' - -import '../imports/ui/plugins' - -import App from '../imports/ui/App.vue' - -Meteor.startup(() => { - new Vue({ - el: '#app', - ...App, - }) -}) diff --git a/tools/static-assets/skel-vue-2/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue deleted file mode 100644 index e126098ccb..0000000000 --- a/tools/static-assets/skel-vue-2/imports/ui/App.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/tools/static-assets/skel-vue-2/package.json b/tools/static-assets/skel-vue-2/package.json deleted file mode 100644 index e8cfe3ee72..0000000000 --- a/tools/static-assets/skel-vue-2/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "~name~", - "private": true, - "scripts": { - "start": "meteor run", - "test": "meteor test --once --driver-package meteortesting:mocha", - "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", - "visualize": "meteor --production --extra-packages bundle-visualizer" - }, - "dependencies": { - "@babel/runtime": "^7.17.9", - "meteor-node-stubs": "^1.2.1", - "vue": "^2.6.14", - "vue-meteor-tracker": "^2.0.0-beta.5" - }, - "meteor": { - "mainModule": { - "client": "client/main.js", - "server": "server/main.js" - }, - "testModule": "tests/main.js" - } -} diff --git a/tools/static-assets/skel-vue-2/server/main.js b/tools/static-assets/skel-vue-2/server/main.js deleted file mode 100644 index 42950618b6..0000000000 --- a/tools/static-assets/skel-vue-2/server/main.js +++ /dev/null @@ -1,3 +0,0 @@ -import '../imports/api/fixtures' -import '../imports/api/methods' -import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue-2/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js deleted file mode 100644 index 6d2a32e09d..0000000000 --- a/tools/static-assets/skel-vue-2/tests/main.js +++ /dev/null @@ -1,20 +0,0 @@ -import assert from "assert"; - -describe("skel", function () { - it("package.json has correct name", async function () { - const { name } = await import("../package.json"); - assert.strictEqual(name, "skel"); - }); - - if (Meteor.isClient) { - it("client is not server", function () { - assert.strictEqual(Meteor.isServer, false); - }); - } - - if (Meteor.isServer) { - it("server is not client", function () { - assert.strictEqual(Meteor.isClient, false); - }); - } -}); diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders deleted file mode 100644 index c07b6ff75a..0000000000 --- a/tools/static-assets/skel-vue/.meteor/.finished-upgraders +++ /dev/null @@ -1,19 +0,0 @@ -# This file contains information which helps Meteor properly upgrade your -# app when you run 'meteor update'. You should check it into version control -# with your project. - -notices-for-0.9.0 -notices-for-0.9.1 -0.9.4-platform-file -notices-for-facebook-graph-api-2 -1.2.0-standard-minifiers-package -1.2.0-meteor-platform-split -1.2.0-cordova-changes -1.2.0-breaking-changes -1.3.0-split-minifiers-package -1.4.0-remove-old-dev-bundle-link -1.4.1-add-shell-server-package -1.4.3-split-account-service-packages -1.5-add-dynamic-import-package -1.7-split-underscore-from-meteor-base -1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id deleted file mode 100644 index dd363b2513..0000000000 --- a/tools/static-assets/skel-vue/.meteor/.id +++ /dev/null @@ -1,7 +0,0 @@ -# This file contains a token that is unique to your project. -# Check it into your repository along with the rest of this directory. -# It can be used for purposes such as: -# - ensuring you don't accidentally deploy one app on top of another -# - providing package authors with aggregated statistics - -kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 2565a5fe32..83be6b3a62 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -4,18 +4,21 @@ # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base@1.5.1 # Packages every Meteor app needs to have -mobile-experience@1.1.0 # Packages for a great mobile UX -mongo@1.16.0 # The database Meteor supports right now -reactive-var@1.0.11 # Reactive variable for tracker +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker -standard-minifier-css@1.8.2 # CSS minifier run for production mode -standard-minifier-js@2.8.1 # JS minifier run for production mode -es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers -ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code -typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules -shell-server@0.5.0 # Server-side component of the `meteor shell` command -hot-module-replacement@0.5.1 # Update client in development without reloading the page +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command -static-html@1.3.2 # Define static page content in .html files -vite:bundler +tracker # Dependency tracker to allow reactive callbacks +static-html # Define static page content in .html files +akryum:vue-component # Vue-CLI template to publish components + +meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha +johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release deleted file mode 100644 index 1d2a6d0f79..0000000000 --- a/tools/static-assets/skel-vue/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions deleted file mode 100644 index 3b89f7359b..0000000000 --- a/tools/static-assets/skel-vue/.meteor/versions +++ /dev/null @@ -1,71 +0,0 @@ -allow-deny@1.1.1 -autoupdate@1.8.0 -babel-compiler@7.9.2 -babel-runtime@1.5.1 -base64@1.0.12 -binary-heap@1.0.11 -blaze-tools@1.1.3 -boilerplate-generator@1.7.1 -caching-compiler@1.2.2 -caching-html-compiler@1.2.1 -callback-hook@1.4.0 -check@1.3.1 -ddp@1.4.0 -ddp-client@2.6.0 -ddp-common@1.4.0 -ddp-server@2.6.0 -diff-sequence@1.1.1 -dynamic-import@0.7.2 -ecmascript@0.16.2 -ecmascript-runtime@0.8.0 -ecmascript-runtime-client@0.12.1 -ecmascript-runtime-server@0.11.0 -ejson@1.1.2 -es5-shim@4.8.0 -fetch@0.1.1 -geojson-utils@1.0.10 -hot-code-push@1.0.4 -hot-module-replacement@0.5.1 -html-tools@1.1.3 -htmljs@1.1.1 -id-map@1.1.1 -inter-process-messaging@0.1.1 -launch-screen@1.3.0 -logging@1.3.1 -meteor@1.10.1 -meteor-base@1.5.1 -minifier-css@1.6.1 -minifier-js@2.7.5 -minimongo@1.9.0 -mobile-experience@1.1.0 -mobile-status-bar@1.1.0 -modern-browsers@0.1.8 -modules@0.19.0 -modules-runtime@0.13.0 -modules-runtime-hot@0.14.0 -mongo@1.16.0 -mongo-decimal@0.1.3 -mongo-dev-server@1.1.0 -mongo-id@1.0.8 -npm-mongo@4.9.0 -ordered-dict@1.1.0 -promise@0.12.0 -random@1.2.0 -react-fast-refresh@0.2.3 -reactive-var@1.0.11 -reload@1.3.1 -retry@1.1.0 -routepolicy@1.1.1 -shell-server@0.5.0 -socket-stream-client@0.5.0 -spacebars-compiler@1.3.1 -standard-minifier-css@1.8.2 -standard-minifier-js@2.8.1 -static-html@1.3.2 -templating-tools@1.2.2 -tracker@1.2.0 -typescript@4.5.4 -underscore@1.0.10 -vite:bundler@0.1.9 -webapp@1.13.1 -webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md deleted file mode 100644 index 7ba6226cb0..0000000000 --- a/tools/static-assets/skel-vue/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Meteor + Vue3 + Vite - -This is a simple example of how to use Vue3 with Meteor. - -## How to use - -1. Clone this repo -2. Run `meteor npm install` -3. Run `meteor` -4. Open `http://localhost:3000` in your browser - -## Libraries used - -- [Vue3](https://v3.vuejs.org/) -- [Vite](https://vitejs.dev/) -- [Vue Router](https://next.router.vuejs.org/) -- [Meteor](https://www.meteor.com/) -- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) -- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css deleted file mode 100644 index b5c61c9567..0000000000 --- a/tools/static-assets/skel-vue/client/main.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html index 9e2393399c..99c3dfb74c 100644 --- a/tools/static-assets/skel-vue/client/main.html +++ b/tools/static-assets/skel-vue/client/main.html @@ -1,16 +1,7 @@ ~name~ - - - - - -
diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js index 97d382a9bd..665c6aa1b1 100644 --- a/tools/static-assets/skel-vue/client/main.js +++ b/tools/static-assets/skel-vue/client/main.js @@ -1 +1,12 @@ -// main entry point is in imports/ui/main.jsx +import Vue from 'vue' + +import '../imports/ui/plugins' + +import App from '../imports/ui/App.vue' + +Meteor.startup(() => { + new Vue({ + el: '#app', + ...App, + }) +}) diff --git a/tools/static-assets/skel-vue-2/imports/api/collections/Links.js b/tools/static-assets/skel-vue/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/collections/Links.js rename to tools/static-assets/skel-vue/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/api/fixtures.js b/tools/static-assets/skel-vue/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/fixtures.js rename to tools/static-assets/skel-vue/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js deleted file mode 100644 index 4e98fcca62..0000000000 --- a/tools/static-assets/skel-vue/imports/api/links.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Meteor } from 'meteor/meteor' -import { Mongo } from 'meteor/mongo' - -export const LinksCollection = new Mongo.Collection('links') - -if (Meteor.isServer) { - Meteor.publish('links', function () { - return LinksCollection.find({}) - }) -} diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/api/methods/index.js b/tools/static-assets/skel-vue/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/methods/index.js rename to tools/static-assets/skel-vue/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/index.js b/tools/static-assets/skel-vue/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/index.js rename to tools/static-assets/skel-vue/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/links.js b/tools/static-assets/skel-vue/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/links.js rename to tools/static-assets/skel-vue/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue deleted file mode 100644 index d1ba384f1b..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/About.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue index 7a775391cb..e126098ccb 100644 --- a/tools/static-assets/skel-vue/imports/ui/App.vue +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -1,10 +1,26 @@ - - + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue deleted file mode 100644 index 5b1997efec..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue deleted file mode 100644 index ebe691f4d2..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Hello.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue deleted file mode 100644 index 0473845661..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Home.vue +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue deleted file mode 100644 index 5a17339c53..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/Info.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue b/tools/static-assets/skel-vue/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js deleted file mode 100644 index e3500841ea..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/main.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Meteor } from 'meteor/meteor' -import { createApp } from 'vue' -import { VueMeteor } from 'vue-meteor-tracker' - -import App from './App.vue' -import { router } from './router' - -Meteor.startup(() => { - const app = createApp(App) - app.use(router) - app.use(VueMeteor) - app.mount('#app') -}) diff --git a/tools/static-assets/skel-vue-2/imports/ui/plugins.js b/tools/static-assets/skel-vue/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue-2/imports/ui/plugins.js rename to tools/static-assets/skel-vue/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js deleted file mode 100644 index 7768ef4894..0000000000 --- a/tools/static-assets/skel-vue/imports/ui/router.js +++ /dev/null @@ -1,18 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import Home from './Home.vue' - -export const router = createRouter({ - history: createWebHistory(), - routes: [ - { - path: '/', - name: 'home', - component: Home, - }, - { - path: '/about', - name: 'about', - component: () => import('./About.vue'), - }, - ], -}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index f8dc1cace8..e8cfe3ee72 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -3,7 +3,6 @@ "private": true, "scripts": { "start": "meteor run", - "build": "meteor build ../output/vue --directory", "test": "meteor test --once --driver-package meteortesting:mocha", "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", "visualize": "meteor --production --extra-packages bundle-visualizer" @@ -11,9 +10,8 @@ "dependencies": { "@babel/runtime": "^7.17.9", "meteor-node-stubs": "^1.2.1", - "vue": "^3.2.45", - "vue-meteor-tracker": "^3.0.0-beta.7", - "vue-router": "^4.1.6" + "vue": "^2.6.14", + "vue-meteor-tracker": "^2.0.0-beta.5" }, "meteor": { "mainModule": { @@ -21,13 +19,5 @@ "server": "server/main.js" }, "testModule": "tests/main.js" - }, - "devDependencies": { - "@types/meteor": "^2.8.1", - "@vitejs/plugin-vue": "^3.2.0", - "autoprefixer": "^10.4.13", - "postcss": "^8.4.19", - "tailwindcss": "^3.2.4", - "vite": "^3.2.3" } } diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js deleted file mode 100644 index 33ad091d26..0000000000 --- a/tools/static-assets/skel-vue/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js index 44f7bc045b..42950618b6 100644 --- a/tools/static-assets/skel-vue/server/main.js +++ b/tools/static-assets/skel-vue/server/main.js @@ -1,31 +1,3 @@ -import { Meteor } from 'meteor/meteor' -import { LinksCollection } from '/imports/api/links' - -async function insertLink({ title, url }) { - await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) -} - -Meteor.startup(async () => { - // If the Links collection is empty, add some data. - if ((await LinksCollection.find().countAsync()) === 0) { - await insertLink({ - title: 'Do the Tutorial', - url: 'https://www.solidjs.com/tutorial/introduction_basics', - }) - - await insertLink({ - title: 'Follow the Guide', - url: 'https://guide.meteor.com', - }) - - await insertLink({ - title: 'Read the Docs', - url: 'https://docs.meteor.com', - }) - - await insertLink({ - title: 'Discussions', - url: 'https://forums.meteor.com', - }) - } -}) +import '../imports/api/fixtures' +import '../imports/api/methods' +import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js deleted file mode 100644 index 72c950fc84..0000000000 --- a/tools/static-assets/skel-vue/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], - theme: { - extend: {}, - }, - plugins: [], -} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js index 086819d896..6d2a32e09d 100644 --- a/tools/static-assets/skel-vue/tests/main.js +++ b/tools/static-assets/skel-vue/tests/main.js @@ -1,20 +1,20 @@ -import assert from 'assert' +import assert from "assert"; -describe('vue-skeleton', function () { - it('package.json has correct name', async function () { - const { name } = await import('../package.json') - assert.strictEqual(name, 'vue-skeleton') - }) +describe("skel", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "skel"); + }); if (Meteor.isClient) { - it('client is not server', function () { - assert.strictEqual(Meteor.isServer, false) - }) + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); } if (Meteor.isServer) { - it('server is not client', function () { - assert.strictEqual(Meteor.isClient, false) - }) + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); } -}) +}); diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js deleted file mode 100644 index d3aeaa9aba..0000000000 --- a/tools/static-assets/skel-vue/vite.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -export default defineConfig({ - plugins: [vue()], - meteor: { - clientEntry: 'imports/ui/main.js', - }, - optimizeDeps: { - exclude: ['vue-meteor-tracker'], - }, -}) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 88e1ef394b..234b36f9bc 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,7 +29,6 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**", - "./static-assets/scaffolds*/**", + "./static-assets/skel*/**" ] } From f60bfc7f75a24263539ef67fe856afab6eaf983e Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 10:17:42 -0400 Subject: [PATCH 277/292] Revert "Revert "Merge pull request #12273 from meteor/release-2.9"" This reverts commit 5d19fec09b195d3c3bfea8559ed039c10d253de7. --- .circleci/config.yml | 64 +- .travis.yml | 14 +- docs/history.md | 119 +- docs/source/api/email.md | 22 + docs/source/commandline.md | 393 +- guide/_config.yml | 3 +- guide/source/2.9-migration.md | 102 + meteor | 2 +- .../eslint-plugin-meteor/package.json | 2 +- .../scripts/dev-bundle-tool-package.js | 4 +- npm-packages/meteor-babel/options.js | 18 +- npm-packages/meteor-babel/package-lock.json | 3880 ++++++++++++++++- npm-packages/meteor-babel/package.json | 6 +- npm-packages/meteor-babel/runtime.js | 24 +- npm-packages/meteor-installer/config.js | 2 +- npm-packages/meteor-installer/package.json | 2 +- packages/accounts-base/accounts_client.js | 5 + .../accounts-base/accounts_client_tests.js | 48 +- packages/accounts-base/accounts_common.js | 59 +- packages/accounts-base/accounts_server.js | 101 +- packages/accounts-base/accounts_tests.js | 56 + packages/accounts-base/package.js | 6 +- packages/accounts-oauth/oauth_common.js | 55 + packages/accounts-oauth/oauth_server.js | 43 + packages/accounts-oauth/package.js | 7 +- packages/accounts-password/package.js | 2 +- packages/accounts-password/password_client.js | 2 - packages/accounts-password/password_server.js | 113 +- packages/accounts-password/password_tests.js | 4 +- .../.npm/package/npm-shrinkwrap.json | 746 ++-- packages/babel-compiler/package.js | 4 +- packages/ecmascript/package.js | 2 +- packages/email/email.js | 135 +- packages/email/email_test_helpers.js | 21 + packages/email/email_tests.js | 582 ++- packages/email/email_tests_data.js | 254 ++ packages/email/package.js | 2 +- packages/facebook-oauth/facebook_server.js | 137 +- packages/facebook-oauth/package.js | 3 +- packages/github-oauth/github_server.js | 29 +- packages/github-oauth/package.js | 2 +- packages/google-oauth/google_server.js | 163 +- packages/google-oauth/package.js | 2 +- packages/meetup-oauth/meetup_server.js | 83 +- packages/meetup-oauth/package.js | 3 +- .../meteor_developer_server.js | 126 +- packages/meteor-developer-oauth/package.js | 3 +- packages/meteor-tool/package.js | 2 +- packages/meteor/asl-helpers.js | 22 + packages/meteor/helpers.js | 34 +- packages/meteor/meteor.d.ts | 18 +- packages/meteor/package.js | 5 +- packages/minifier-css/minifier-async-tests.js | 51 + packages/minifier-css/minifier.js | 32 +- packages/minifier-css/package.js | 3 +- packages/minimongo/cursor.js | 6 +- packages/minimongo/local_collection.js | 8 + packages/minimongo/package.js | 2 +- packages/mongo/collection.js | 27 + packages/mongo/collection_async_tests.js | 11 + packages/mongo/mongo_driver.js | 12 + packages/mongo/oplog_v2_converter.js | 6 +- packages/mongo/oplog_v2_converter_tests.js | 65 + packages/mongo/package.js | 2 +- packages/mongo/remote_collection_driver.js | 21 +- .../.npm/package/npm-shrinkwrap.json | 374 +- packages/npm-mongo/package.js | 4 +- packages/oauth/oauth_server.js | 32 +- packages/oauth/package.js | 3 +- packages/oauth1/oauth1_binding.js | 92 +- packages/oauth1/oauth1_server.js | 10 +- packages/oauth1/oauth1_tests.js | 22 +- packages/oauth1/package.js | 7 +- packages/oauth2/oauth2_server.js | 4 +- packages/oauth2/oauth2_tests.js | 16 +- packages/oauth2/package.js | 2 +- .../package-version-parser-tests.js | 4 +- packages/package-version-parser/package.js | 5 +- packages/promise/package.js | 2 +- packages/promise/server.js | 14 +- packages/standard-minifier-css/package.js | 2 +- .../plugin/minify-css.js | 2 +- packages/test-helpers/async_multi.js | 30 +- packages/test-helpers/package.js | 5 +- packages/test-in-browser/driver.js | 4 +- packages/test-in-browser/package.js | 2 +- packages/test-in-console/puppeteerRunner.js | 32 +- packages/tinytest/package.js | 2 +- packages/tinytest/tinytest.js | 153 +- packages/tinytest/tinytest_server.js | 4 +- packages/twitter-oauth/package.js | 2 +- packages/twitter-oauth/twitter_server.js | 6 +- packages/typescript/package.js | 2 +- packages/weibo-oauth/package.js | 3 +- packages/weibo-oauth/weibo_server.js | 82 +- .../admin/meteor-release-experimental.json | 2 +- scripts/admin/meteor-release-official.json | 2 +- scripts/dev-bundle-tool-package.js | 2 +- tools/cli/commands-packages.js | 2 +- tools/cli/commands.js | 328 +- tools/cli/help.txt | 34 +- tools/console/console.js | 15 + tools/packaging/package-client.js | 1 - tools/static-assets/README.md | 8 + .../static-assets/scaffolds-js/collection.js | 3 + tools/static-assets/scaffolds-js/index.js | 3 + tools/static-assets/scaffolds-js/methods.js | 29 + .../scaffolds-js/publications.js | 6 + .../static-assets/scaffolds-ts/collection.ts | 9 + tools/static-assets/scaffolds-ts/index.ts | 3 + tools/static-assets/scaffolds-ts/methods.ts | 30 + .../scaffolds-ts/publications.ts | 6 + .../skel-apollo/.meteor/packages | 2 +- .../static-assets/skel-bare/.meteor/packages | 2 +- .../static-assets/skel-blaze/.meteor/packages | 3 +- .../skel-chakra-ui/.meteor/packages | 3 +- .../static-assets/skel-full/.meteor/packages | 1 + .../skel-minimal/.meteor/packages | 1 + .../static-assets/skel-react/.meteor/packages | 3 +- .../static-assets/skel-solid/.meteor/packages | 3 +- .../skel-svelte/.meteor/packages | 3 +- .../skel-tailwind/.meteor/packages | 3 +- .../skel-typescript/.meteor/packages | 3 +- .../skel-typescript/package.json | 2 +- tools/static-assets/skel-vue-2/.gitignore | 1 + .../skel-vue-2/.meteor/.gitignore | 1 + .../static-assets/skel-vue-2/.meteor/packages | 24 + .../skel-vue-2/.meteor/platforms | 2 + .../static-assets/skel-vue-2/client/main.html | 7 + tools/static-assets/skel-vue-2/client/main.js | 12 + .../imports/api/collections/Links.js | 0 .../imports/api/collections/Links.tests.js | 0 .../imports/api/fixtures.js | 0 .../imports/api/methods/createLink.js | 0 .../imports/api/methods/createLink.tests.js | 0 .../imports/api/methods/index.js | 0 .../imports/api/publications/index.js | 0 .../imports/api/publications/links.js | 0 .../imports/api/publications/links.tests.js | 0 .../skel-vue-2/imports/ui/App.vue | 26 + .../imports/ui/components/Hello.vue | 0 .../imports/ui/components/Info.vue | 0 .../imports/ui/plugins.js | 0 tools/static-assets/skel-vue-2/package.json | 23 + tools/static-assets/skel-vue-2/server/main.js | 3 + tools/static-assets/skel-vue-2/tests/main.js | 20 + .../skel-vue/.meteor/.finished-upgraders | 19 + tools/static-assets/skel-vue/.meteor/.id | 7 + tools/static-assets/skel-vue/.meteor/packages | 29 +- tools/static-assets/skel-vue/.meteor/release | 1 + tools/static-assets/skel-vue/.meteor/versions | 71 + tools/static-assets/skel-vue/README.md | 19 + tools/static-assets/skel-vue/client/main.css | 3 + tools/static-assets/skel-vue/client/main.html | 9 + tools/static-assets/skel-vue/client/main.js | 13 +- .../skel-vue/imports/api/links.js | 10 + .../skel-vue/imports/ui/About.vue | 5 + .../static-assets/skel-vue/imports/ui/App.vue | 32 +- .../skel-vue/imports/ui/AppMenu.vue | 6 + .../skel-vue/imports/ui/Hello.vue | 16 + .../skel-vue/imports/ui/Home.vue | 10 + .../skel-vue/imports/ui/Info.vue | 16 + .../static-assets/skel-vue/imports/ui/main.js | 13 + .../skel-vue/imports/ui/router.js | 18 + tools/static-assets/skel-vue/package.json | 14 +- .../static-assets/skel-vue/postcss.config.js | 6 + tools/static-assets/skel-vue/server/main.js | 34 +- .../static-assets/skel-vue/tailwind.config.js | 8 + tools/static-assets/skel-vue/tests/main.js | 26 +- tools/static-assets/skel-vue/vite.config.js | 12 + tools/tsconfig.json | 3 +- 171 files changed, 7985 insertions(+), 1750 deletions(-) create mode 100644 guide/source/2.9-migration.md create mode 100644 packages/email/email_test_helpers.js create mode 100644 packages/email/email_tests_data.js create mode 100644 packages/meteor/asl-helpers.js create mode 100644 packages/minifier-css/minifier-async-tests.js create mode 100644 tools/static-assets/scaffolds-js/collection.js create mode 100644 tools/static-assets/scaffolds-js/index.js create mode 100644 tools/static-assets/scaffolds-js/methods.js create mode 100644 tools/static-assets/scaffolds-js/publications.js create mode 100644 tools/static-assets/scaffolds-ts/collection.ts create mode 100644 tools/static-assets/scaffolds-ts/index.ts create mode 100644 tools/static-assets/scaffolds-ts/methods.ts create mode 100644 tools/static-assets/scaffolds-ts/publications.ts create mode 100644 tools/static-assets/skel-vue-2/.gitignore create mode 100644 tools/static-assets/skel-vue-2/.meteor/.gitignore create mode 100644 tools/static-assets/skel-vue-2/.meteor/packages create mode 100644 tools/static-assets/skel-vue-2/.meteor/platforms create mode 100644 tools/static-assets/skel-vue-2/client/main.html create mode 100644 tools/static-assets/skel-vue-2/client/main.js rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/collections/Links.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/fixtures.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/createLink.tests.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/methods/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/index.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.js (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/api/publications/links.tests.js (100%) create mode 100644 tools/static-assets/skel-vue-2/imports/ui/App.vue rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Hello.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/components/Info.vue (100%) rename tools/static-assets/{skel-vue => skel-vue-2}/imports/ui/plugins.js (100%) create mode 100644 tools/static-assets/skel-vue-2/package.json create mode 100644 tools/static-assets/skel-vue-2/server/main.js create mode 100644 tools/static-assets/skel-vue-2/tests/main.js create mode 100644 tools/static-assets/skel-vue/.meteor/.finished-upgraders create mode 100644 tools/static-assets/skel-vue/.meteor/.id create mode 100644 tools/static-assets/skel-vue/.meteor/release create mode 100644 tools/static-assets/skel-vue/.meteor/versions create mode 100644 tools/static-assets/skel-vue/README.md create mode 100644 tools/static-assets/skel-vue/client/main.css create mode 100644 tools/static-assets/skel-vue/imports/api/links.js create mode 100644 tools/static-assets/skel-vue/imports/ui/About.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/AppMenu.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Hello.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Home.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/Info.vue create mode 100644 tools/static-assets/skel-vue/imports/ui/main.js create mode 100644 tools/static-assets/skel-vue/imports/ui/router.js create mode 100644 tools/static-assets/skel-vue/postcss.config.js create mode 100644 tools/static-assets/skel-vue/tailwind.config.js create mode 100644 tools/static-assets/skel-vue/vite.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index e8e1b5e52f..8dfa556f94 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2 +version: 2.1 # A reusable "run" snippet which is ran before each test to setup the # environment for user-limits, core-dumps, etc. @@ -96,6 +96,30 @@ build_machine_environment: &build_machine_environment NUM_GROUPS: 12 RUNNING_AVG_LENGTH: 6 +can_disable_fibers: &can_disable_fibers + parameters: + fibers: + type: boolean + default: true + +set_fibers_env: &set_fibers_env + name: "Disable Fibers" + command: | + if [ "<< parameters.fibers >>" == "false" ]; then + echo "Disabling Fibers" + echo 'export DISABLE_FIBERS=1' >> "$BASH_ENV" + source "$BASH_ENV" + fi + + +# Run tests with Fibers and then without. +matrix_for_fibers: &matrix_for_fibers + matrix: + parameters: + # If we want to run with Fibers and without, just append false here. + fibers: [true] + + jobs: Get Ready: <<: *build_machine_environment @@ -167,6 +191,7 @@ jobs: path: /tmp/memuse.txt Isolated Tests: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -175,6 +200,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -209,6 +235,7 @@ jobs: path: /tmp/memuse.txt Test Group 0: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -217,6 +244,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -249,6 +277,7 @@ jobs: path: /tmp/memuse.txt Test Group 1: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -257,6 +286,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -289,6 +319,7 @@ jobs: path: /tmp/memuse.txt Test Group 2: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -297,6 +328,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -329,6 +361,7 @@ jobs: path: /tmp/memuse.txt Test Group 3: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -337,6 +370,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -369,6 +403,7 @@ jobs: path: /tmp/memuse.txt Test Group 4: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -377,6 +412,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -409,6 +445,7 @@ jobs: path: /tmp/memuse.txt Test Group 5: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -417,6 +454,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -449,6 +487,7 @@ jobs: path: /tmp/memuse.txt Test Group 6: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -457,6 +496,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -489,6 +529,7 @@ jobs: path: /tmp/memuse.txt Test Group 7: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -497,6 +538,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -529,6 +571,7 @@ jobs: path: /tmp/memuse.txt Test Group 8: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -537,6 +580,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -569,6 +613,7 @@ jobs: path: /tmp/memuse.txt Test Group 9: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -577,6 +622,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -609,6 +655,7 @@ jobs: path: /tmp/memuse.txt Test Group 10: + <<: *can_disable_fibers <<: *build_machine_environment steps: - run: @@ -617,6 +664,7 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: *set_fibers_env - run: name: "Print environment" command: printenv @@ -727,6 +775,7 @@ jobs: npm test Clean Up: + <<: *can_disable_fibers <<: *build_machine_environment steps: - attach_workspace: @@ -809,45 +858,58 @@ workflows: - Docs - Get Ready - Isolated Tests: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 0: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 1: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 2: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 3: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 4: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 5: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 6: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 7: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 8: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 9: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 10: + <<: *matrix_for_fibers requires: - Get Ready - Test Group 11: requires: - Get Ready - Clean Up: + <<: *matrix_for_fibers requires: - Isolated Tests - Test Group 0 diff --git a/.travis.yml b/.travis.yml index 2d4a4a74d6..35e4e9f859 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,13 +8,17 @@ cache: - ".meteor" - ".babel-cache" script: - - export phantom=false - # to skip Downloading Chromium on every run - # https://github.com/dfernandez79/puppeteer/blob/main/README.md#q-chromium-gets-downloaded-on-every-npm-ci-run-how-can-i-cache-the-download - - export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium - travis_retry ./packages/test-in-console/run.sh env: - - CXX=g++-4.8 + global: + - CXX=g++-4.8 + - phantom=false + - PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium + jobs: + # We don't want to run the tests without fibers anymore. + # - DISABLE_FIBERS=1 + # Use a different flag, since node would use false as a string. + - FIBERS_ENABLED=1 addons: apt: sources: diff --git a/docs/history.md b/docs/history.md index d8e5806060..346edbfca1 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,104 @@ +## 2.9, 2022-XX-XX + +### Highlights +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) +* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) +* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) +* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) +* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) +* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) +* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) +* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) +* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) +* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) +* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) + + +#### Breaking Changes + +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` + + +#### Migration Steps + +#### Meteor Version Release + +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `eslint-plugin-meteor@7.4.0`: + - updated Typescript deps and meteor babel +* `accounts-base@2.2.6` + - Moved some functions to accounts-oauth. +* `accounts-oauth@1.4.2` + - Received functions from accounts-base. +* `accounts-password@2.3.2` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` +* `babel-compiler@7.10.1` + - Updated babel to 7.17.1. +* `email@2.2.3` + - Create Email.sendAsync method without using Fibers. +* `facebook-oauth@1.11.2` + - Updated facebook-oauth to use async functions. +* `github-oauth@1.4.1` + - Updated github-oauth to use async functions. +* `google-oauth@1.4.3` + - Updated google-oauth to use async functions. +* `meetup-oauth@1.1.2` + - Updated meetup-oauth to use async functions. +* `meteor-developer-oauth@1.3.2` + - Updated meteor-developer-oauth to use async functions. +* `meteor@1.10.3` + - Added Async Local Storage helpers. +* `minifier-css@1.6.2` + - Asyncfied `minifyCss` function. +* `minimongo@1.9.1` + - Implemented Fibers-less MongoDB count methods. +* `mongo@1.16.2` + - Implemented Fibers-less MongoDB count methods. +* `npm-mongo@4.12.1` + - Updated npm-mongo to 4.12. +* `oauth@2.1.3` + - Asyncfied methods. +* `oauth1@1.5.1` + - Asyncfied methods. +* `oauth2@1.3.2` + - Asyncfied methods. +* `package-version-parser@3.2.1` + - Removed underscore. +* `promise@0.12.2` + - Added DISABLE_FIBERS flag. +* `standard-minifier-css@1.8.3` + - Asyncfied minify method. +* `test-helpers@1.3.1` + - added runAndThrowIfNeeded function. +* `test-in-browser@1.3.2` + - Adjusted e[type] to e.type +* `tinytest@1.2.2` + - TinyTest package without Future +* `twitter-oauth@1.3.2` + - Asyncfied methods. +* `typescript@4.6.4` + - updated typescript to 4.6.4. +* `weibo-oauth@1.3.2` + - Asyncfied methods. + +#### Special thanks to +- [@henriquealbert](https://github.com/henriquealbert) +- [@edimarlnx](https://github.com/edimarlnx) +- [@matheusccastroo](https://github.com/matheusccastroo) +- [@Grubba27](https://github.com/Grubba27) +- [@StorytellerCZ](https://github.com/StorytellerCZ) +- [@radekmie](https://github.com/radekmie) +- [@piotrpospiech](https://github.com/piotrpospiech) +- [@harryadel](https://github.com/harryadel) + +For making this great framework even better! + + ## v2.8.2, 2022-11-29 #### Highlights @@ -15,9 +116,6 @@ N/A #### Meteor Version Release * `mongo@1.16.2`: - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). -* `meteorjs/babel@7.16.1-beta.0` - - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327) - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 #### Special thanks to - [@henriquealbert](https://github.com/henriquealbert) @@ -26,6 +124,7 @@ N/A For making this great framework even better! + ## 2.8.1, 2022-11-14 #### Highlights @@ -132,7 +231,7 @@ _In case you want types in your app using the core packages types/zodern:types ( * `test-in-browser@1.3.1` - removed underscore. * `tracker@1.2.1` - - added types for package. +- added types for package. * `twitter-oauth@1.3.1` - removed underscore. * `underscore@1.0.11` @@ -141,7 +240,6 @@ _In case you want types in your app using the core packages types/zodern:types ( - added types for package. * `webapp-hashing@1.1.1` - added types for package. - ## v2.8, 2022-10-19 #### Highlights @@ -184,7 +282,16 @@ Read our [Migration Guide](https://guide.meteor.com/2.8-migration.html) for this - Validates required Node.js version. [PR](https://github.com/meteor/meteor/pull/12066). * `npm-mongo@4.9.0`: - Updated MongoDB driver to 4.9. [PR](https://github.com/meteor/meteor/pull/12163). - +* `@meteorjs/babel@7.17.0` + - Upgrade TypeScript to `4.6.4` +* `babel-compiler@7.10.0` + - Upgrade TypeScript to `4.6.4` +* `ecmascript@0.16.3` + - Upgrade TypeScript to `4.6.4` +* `typescript@4.6.4` + - Upgrade TypeScript to `4.6.4` +* `eslint-plugin-meteor@7.4.0` + - Upgrade TypeScript to `4.6.4` #### Independent Releases * `accounts-passwordless@2.1.3`: diff --git a/docs/source/api/email.md b/docs/source/api/email.md index 77ea6edf24..95ef8d6578 100644 --- a/docs/source/api/email.md +++ b/docs/source/api/email.md @@ -82,6 +82,28 @@ Meteor.call( 'This is a test of Email.send.' ); ``` +{% apibox "Email.sendAsync" %} + +`sendAsync` only works on the server. It has the same behavior as `Email.send`, but returns a Promise. +If you defined `Email.customTransport`, the `callAsync` method returns the return value from the `customTransport` method or a Promise, if this method is async. + +```js +// Server: Define a method that the client can call. +Meteor.methods({ + sendEmail(to, from, subject, text) { + // Make sure that all arguments are strings. + check([to, from, subject, text], [String]); + + // Let other method calls from the same client start running, without + // waiting for the email sending to complete. + this.unblock(); + + return Email.sendAsync({ to, from, subject, text }).catch(err => { + // + }); + } +}); +``` {% apibox "Email.hookSend" %} diff --git a/docs/source/commandline.md b/docs/source/commandline.md index ae79273d84..ebb9381d3a 100644 --- a/docs/source/commandline.md +++ b/docs/source/commandline.md @@ -129,7 +129,19 @@ Create a basic [Blaze](https://blazejs.org/) app. `--vue` -Create a basic vue-based app. See the [Vue guide](https://guide.meteor.com/vue.html) +Create a basic [Vue 3](https://vuejs.org/) app. + +`--react` + +Create a basic react app. See the section on [React tutorial](https://guide.meteor.com/react.html#react-tutorial) +for more information. This is the default. + +`--angular` +for more information. + +`--vue-2` + +Create a basic vue2-based app. See the [Vue guide](https://vue-tutorial.meteor.com/) for more information. `--svelte` @@ -146,43 +158,350 @@ Create a basic [React](https://reactjs.org) + [Chakra-UI](https://chakra-ui.com/ `--solid` -Create a basic [solid](https://www.solidjs.com/) app. +Create a basic [Solid](https://www.solidjs.com/) app. **Packages** -| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | -|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:-------:|:----------:|:------------:|:-------------:|:---------:| -| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | -| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | -| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | -| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | -| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | -| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | -| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | -| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | -| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | -| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | -| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | -| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | -| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | -| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | -| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | -| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | -| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | -| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | -| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | -| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | -| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | -| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | -| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | -| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | -| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | -| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | -| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | -| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | -| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | -| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | -| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | +| | Default (`--react`) | `--bare` | `--full` | `--minimal` | `--blaze` | `--apollo` | `--vue-2` | `--svelte` | `--tailwind` | `--chakra-ui` | `--solid` | `--vue` | +|------------------------------------------------------------------------------------------------------|:-------------------:|:--------:|:--------:|:-----------:|:---------:|:----------:|:---------:|:----------:|:------------:|:-------------:|:---------:|:-------:| +| [autopublish](https://atmospherejs.com/meteor/autopublish) | X | | | | X | | | X | X | X | X | | +| [akryum:vue-component](https://atmospherejs.com/akryum/vue-component) | | | | | | | X | | | | | | +| [apollo](https://atmospherejs.com/meteor/apollo) | | | | | | X | | | | | | | +| [blaze-html-templates](https://atmospherejs.com/meteor/blaze-html-templates) | | | X | | X | | | | | | | | +| [ecmascript](https://atmospherejs.com/meteor/ecmascript) | X | X | X | X | X | X | X | X | X | X | X | X | +| [es5-shim](https://atmospherejs.com/meteor/es5-shim) | X | X | X | X | X | X | X | X | X | X | X | X | +| [hot-module-replacement](https://atmospherejs.com/meteor/hot-module-replacement) | X | | | | X | X | | | X | X | X | X | +| [insecure](https://atmospherejs.com/meteor/insecure) | X | | | | X | | | X | X | X | X | X | +| [johanbrook:publication-collector](https://atmospherejs.com/meteor/johanbrook/publication-collector) | | | X | | | X | | | | | | | +| [jquery](https://atmospherejs.com/meteor/jquery) | | | X | | X | | | | | | | | +| [ostrio:flow-router-extra](https://atmospherejs.com/meteor/ostrio/flow-router-extra) | | | X | | | | | | | | | | +| [less](https://atmospherejs.com/meteor/less) | | | X | | | | | | | | | | +| [meteor](https://atmospherejs.com/meteor/meteor) | | | | X | | | | | | | | | +| [meteor-base](https://atmospherejs.com/meteor/meteor-base) | X | X | X | | X | X | X | X | X | X | X | X | +| [mobile-experience](https://atmospherejs.com/meteor/mobile-experience) | X | X | X | | X | X | X | X | X | X | X | X | +| [mongo](https://atmospherejs.com/meteor/mongo) | X | X | X | | X | X | X | X | X | X | X | X | +| [meteortesting:mocha](https://atmospherejs.com/meteortesting/mocha) | | | X | | | | X | | | | | | +| [reactive-var](https://atmospherejs.com/meteor/reactive-var) | X | X | X | | X | X | X | X | X | X | X | X | +| [rdb:svelte-meteor-data](https://atmospherejs.com/rdb/svelte-meteor-data) | | | | | | | | X | | | | | +| [server-render](https://atmospherejs.com/meteor/server-render) | | | | X | | X | X | | | | | | +| [shell-server](https://atmospherejs.com/meteor/shell-server) | | X | | X | X | X | X | X | X | X | X | X | +| [standard-minifier-css](https://atmospherejs.com/meteor/standard-minifier-css) | X | X | X | X | X | X | X | X | X | X | X | X | +| [standard-minifier-js](https://atmospherejs.com/meteor/standard-minifier-js) | X | X | X | X | X | X | X | X | X | X | X | X | +| [static-html](https://atmospherejs.com/meteor/static-html) | | X | | X | | X | X | X | | | | | +| [svelte:compiler](https://atmospherejs.com/svelte/compiler) | | | | | | | | X | | | | | +| [swydo:graphql](https://atmospherejs.com/swydo/graphql) | | | | | | X | | | | | | | +| [tailwindcss](https://tailwindcss.com) | | X | X | | X | | X | | X | | | | +| [tracker](https://atmospherejs.com/meteor/tracker) | | X | X | | X | | X | | | | | | +| [typescript](https://atmospherejs.com/meteor/typescript) | X | X | X | X | X | X | X | X | X | X | X | | +| [webapp](https://atmospherejs.com/meteor/webapp) | | | | X | | | | | | | | | +| [react-meteor-data](https://atmospherejs.com/meteor/react-meteor-data) | X | | | | | | | | X | X | | | +| [vite:bundler](https://atmospherejs.com/vite/bundler) | | | | | | | | | | | X | X | + +

meteor generate

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

collection.js

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

methods.js

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

publication.js

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

index.js

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

path option

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

collection.ts

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

methods.ts

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

publications.ts

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

index.ts

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

Using the Wizard

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

Using your own template

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

How to rename things?

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

How to bring your own templates?

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

meteor login / logout

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

Why is this new API important?

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

Why doing this change now?

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

Can I update to this version without changing my app?

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

What's new?

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

New async methods

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

Accounts-base without service-configuration

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

Migrating from a version older than 2.8?

+ +If you're migrating from a version of Meteor older than Meteor 2.8, there may be important considerations not listed in this guide. Please review the older migration guides for details: + +* [Migrating to Meteor 2.8](2.8-migration.html) (from 2.7) +* [Migrating to Meteor 2.7](2.7-migration.html) (from 2.6) +* [Migrating to Meteor 2.6](2.6-migration.html) (from 2.5) +* [Migrating to Meteor 2.5](2.5-migration.html) (from 2.4) +* [Migrating to Meteor 2.4](2.4-migration.html) (from 2.3) +* [Migrating to Meteor 2.3](2.3-migration.html) (from 2.2) +* [Migrating to Meteor 2.2](2.2-migration.html) (from 2.0) +* [Migrating to Meteor 2.0](2.0-migration.html) (from 1.12) +* [Migrating to Meteor 1.12](1.12-migration.html) (from 1.11) +* [Migrating to Meteor 1.11](1.11-migration.html) (from 1.10.2) +* [Migrating to Meteor 1.10.2](1.10.2-migration.html) (from 1.10) +* [Migrating to Meteor 1.10](1.10-migration.html) (from 1.9.3) +* [Migrating to Meteor 1.9.3](1.9.3-migration.html) (from 1.9) +* [Migrating to Meteor 1.9](1.9-migration.html) (from 1.8.3) +* [Migrating to Meteor 1.8.3](1.8.3-migration.html) (from 1.8.2) +* [Migrating to Meteor 1.8.2](1.8.2-migration.html) (from 1.8) +* [Migrating to Meteor 1.8](1.8-migration.html) (from 1.7) +* [Migrating to Meteor 1.7](1.7-migration.html) (from 1.6) +* [Migrating to Meteor 1.6](1.6-migration.html) (from 1.5) +* [Migrating to Meteor 1.5](1.5-migration.html) (from 1.4) +* [Migrating to Meteor 1.4](1.4-migration.html) (from 1.3) +* [Migrating to Meteor 1.3](1.3-migration.html) (from 1.2) diff --git a/meteor b/meteor index 0779da7ba2..e1379039a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.0 +BUNDLE_VERSION=14.21.1.2 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/eslint-plugin-meteor/package.json b/npm-packages/eslint-plugin-meteor/package.json index 6f01831721..7845d884a3 100644 --- a/npm-packages/eslint-plugin-meteor/package.json +++ b/npm-packages/eslint-plugin-meteor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-meteor", - "version": "7.3.0", + "version": "7.4.0", "author": "Dominik Ferber ", "description": "Meteor specific linting rules for ESLint", "main": "lib/index.js", diff --git a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js index ddab44b16d..de71198d42 100644 --- a/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js +++ b/npm-packages/eslint-plugin-meteor/scripts/dev-bundle-tool-package.js @@ -14,8 +14,8 @@ var packageJson = { pacote: "https://github.com/meteor/pacote/tarball/a81b0324686e85d22c7688c47629d4009000e8b8", "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", - typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.0", + typescript: "4.6.4", + "@meteorjs/babel": "7.17.1-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 21a9be7dde..dc215572b8 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -80,11 +80,7 @@ exports.getDefaults = function getDefaults(features) { function maybeAddReactPlugins(features, options) { if (features && features.react) { - options.presets.push( - [require("@babel/preset-react"), { - runtime: "automatic" - }] - ); + options.presets.push(require("@babel/preset-react")); options.plugins.push( [require("@babel/plugin-proposal-class-properties"), { loose: true @@ -189,11 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); + if (!process.env.DISABLE_FIBERS) { + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: false + }]); + } // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package-lock.json b/npm-packages/meteor-babel/package-lock.json index 7fec2af89a..17c5612fb7 100644 --- a/npm-packages/meteor-babel/package-lock.json +++ b/npm-packages/meteor-babel/package-lock.json @@ -1,8 +1,3875 @@ { "name": "@meteorjs/babel", - "version": "7.16.0-beta.1", - "lockfileVersion": 1, + "version": "7.17.2-beta.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@meteorjs/babel", + "version": "7.17.2-beta.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-react": "^7.16.7", + "@babel/runtime": "7.17.2", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "@meteorjs/reify": "0.23.0", + "babel-preset-meteor": "^7.10.0", + "babel-preset-minify": "^0.5.1", + "convert-source-map": "^1.6.0", + "lodash": "^4.17.21", + "meteor-babel-helpers": "0.0.3", + "typescript": "~4.6.4" + }, + "devDependencies": { + "@babel/plugin-proposal-decorators": "7.14.5", + "@babel/plugin-syntax-decorators": "7.14.5", + "d3": "4.13.0", + "fibers": "5.0.0", + "meteor-promise": "0.9.0", + "mocha": "6.2.3", + "promise": "8.1.0", + "source-map": "0.6.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", + "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", + "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/@babel/core/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/@babel/core/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", + "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@meteorjs/reify": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@meteorjs/reify/-/reify-0.23.0.tgz", + "integrity": "sha512-sHQCbZHoM+PxT+pWvkJDsaOpJP+tMQ31Mr2t1T0YcXl18eScb0bQNafe8TugNCc4pngByppfscVX4ppr84MzDw==", + "dependencies": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "magic-string": "^0.25.3", + "periscopic": "^2.0.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@meteorjs/reify/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "node_modules/babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + }, + "node_modules/babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + }, + "node_modules/babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + }, + "node_modules/babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + }, + "node_modules/babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + }, + "node_modules/babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" + }, + "node_modules/babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-dead-code-elimination": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "node_modules/babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + }, + "node_modules/babel-plugin-minify-mangle-names": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", + "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", + "dependencies": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "node_modules/babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + }, + "node_modules/babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" + }, + "node_modules/babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "node_modules/babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", + "dependencies": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + }, + "node_modules/babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + }, + "node_modules/babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", + "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + }, + "node_modules/babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + }, + "node_modules/babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", + "dependencies": { + "esutils": "^2.0.2" + } + }, + "node_modules/babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + }, + "node_modules/babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + }, + "node_modules/babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + }, + "node_modules/babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "dependencies": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "node_modules/babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + }, + "node_modules/babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + }, + "node_modules/babel-preset-meteor": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.10.0.tgz", + "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==", + "dependencies": { + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13" + } + }, + "node_modules/babel-preset-minify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", + "dependencies": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash": "^4.17.11" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001248", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", + "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/core-js-compat/node_modules/electron-to-chromium": { + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==" + }, + "node_modules/core-js-compat/node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "dev": true, + "dependencies": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + } + }, + "node_modules/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "node_modules/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "node_modules/d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "node_modules/d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "node_modules/d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "node_modules/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "dev": true, + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "node_modules/d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", + "dev": true + }, + "node_modules/d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "node_modules/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "node_modules/d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "node_modules/d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "node_modules/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "node_modules/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "node_modules/d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "node_modules/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", + "dev": true + }, + "node_modules/d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "dev": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "node_modules/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "node_modules/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.793", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", + "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/meteor-babel-helpers": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", + "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + }, + "node_modules/meteor-promise": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.9.0.tgz", + "integrity": "sha512-O1Fj1Oa5FfyIkAkDtZVnoYYEIC3miy7lvEeIQZVYunGSbOuivSbfAiPPsD+P45WNlcBALhUo94UzlHeIKBYNuQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.1.1", @@ -1073,7 +4940,8 @@ "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "requires": {} }, "ansi-colors": { "version": "3.2.3", @@ -2722,9 +6590,9 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unbox-primitive": { "version": "1.0.1", diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index c5c361f366..6733ac41b8 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.16.1-beta.0", + "version": "7.17.2-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ @@ -37,7 +37,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.16.8", "@babel/plugin-transform-runtime": "^7.17.0", "@babel/preset-react": "^7.16.7", - "@babel/runtime": "^7.17.2", + "@babel/runtime": "7.17.2", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", "@babel/types": "^7.17.0", @@ -47,7 +47,7 @@ "convert-source-map": "^1.6.0", "lodash": "^4.17.21", "meteor-babel-helpers": "0.0.3", - "typescript": "^4.5.4" + "typescript": "~4.6.4" }, "devDependencies": { "@babel/plugin-proposal-decorators": "7.14.5", diff --git a/npm-packages/meteor-babel/runtime.js b/npm-packages/meteor-babel/runtime.js index 43b5c85c85..c7fe580b3f 100644 --- a/npm-packages/meteor-babel/runtime.js +++ b/npm-packages/meteor-babel/runtime.js @@ -11,19 +11,21 @@ Module.prototype.resolve = function (id) { require("@meteorjs/reify/lib/runtime").enable(Module.prototype); -require("meteor-promise").makeCompatible( - global.Promise = global.Promise || - require("promise/lib/es6-extensions"), - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + global.Promise = global.Promise || + require("promise/lib/es6-extensions"), + require("fibers") + ); // If Promise.asyncApply is defined, use it to wrap calls to // regeneratorRuntime.async so that the entire async function will run in // its own Fiber, not just the code that comes after the first await. -if (typeof Promise.asyncApply === "function") { - var regeneratorRuntime = require("@babel/runtime/regenerator"); - var realAsync = regeneratorRuntime.async; - regeneratorRuntime.async = function (innerFn) { - return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); - }; + if (typeof Promise.asyncApply === "function") { + var regeneratorRuntime = require("@babel/runtime/regenerator"); + var realAsync = regeneratorRuntime.async; + regeneratorRuntime.async = function (innerFn) { + return Promise.asyncApply(realAsync, regeneratorRuntime, arguments); + }; + } } diff --git a/npm-packages/meteor-installer/config.js b/npm-packages/meteor-installer/config.js index 676cf07665..fcae57bcec 100644 --- a/npm-packages/meteor-installer/config.js +++ b/npm-packages/meteor-installer/config.js @@ -1,7 +1,7 @@ const path = require('path'); const os = require('os'); -const METEOR_LATEST_VERSION = '2.8.1'; +const METEOR_LATEST_VERSION = '2.9.0'; const sudoUser = process.env.SUDO_USER || ''; function isRoot() { return process.getuid && process.getuid() === 0; diff --git a/npm-packages/meteor-installer/package.json b/npm-packages/meteor-installer/package.json index 8afbd9c39e..53d344ef33 100644 --- a/npm-packages/meteor-installer/package.json +++ b/npm-packages/meteor-installer/package.json @@ -1,6 +1,6 @@ { "name": "meteor", - "version": "2.8.2", + "version": "2.9.0", "description": "Install Meteor", "main": "install.js", "scripts": { diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index cfded81faa..842e927ad9 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -798,6 +798,11 @@ if (Package.blaze) { */ Template.registerHelper('currentUser', () => Meteor.user()); + // TODO: the code above needs to be changed to Meteor.userAsync() when we have + // a way to make it reactive using async. + // Template.registerHelper('currentUserAsync', + // async () => await Meteor.userAsync()); + /** * @global * @name loggingIn diff --git a/packages/accounts-base/accounts_client_tests.js b/packages/accounts-base/accounts_client_tests.js index 9ebb7d4b9f..880a71e4fe 100644 --- a/packages/accounts-base/accounts_client_tests.js +++ b/packages/accounts-base/accounts_client_tests.js @@ -94,6 +94,20 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.loggingIn() is false after login has completed', + (test, done) => { + logoutAndCreateUser(test, done, () => { + // Login then verify loggingIn is false after login has completed + Meteor.loginWithPassword(username, password, async () => { + test.isFalse(Meteor.loggingIn()); + test.isTrue(await Meteor.userAsync()); + removeTestUser(done); + }); + }); + } +); + Tinytest.addAsync( 'accounts - Meteor.loggingOut() is true right after a logout call', (test, done) => { @@ -150,7 +164,7 @@ Tinytest.addAsync( ); Tinytest.addAsync( - 'accounts - Meteor.user obeys explicit and default field selectors', + 'accounts - Meteor.user() obeys explicit and default field selectors', (test, done) => { logoutAndCreateUser(test, done, () => { Meteor.loginWithPassword(username, password, () => { @@ -178,6 +192,38 @@ Tinytest.addAsync( } ); +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys explicit and default field selectors', + (test, done) => { + logoutAndCreateUser(test, done, () => { + Meteor.loginWithPassword(username, password, async () => { + // by default, all fields should be returned + let user; + user = await Meteor.userAsync(); + test.equal(user.profile[excludeField], excludeValue); + + // this time we want to exclude the default fields + const options = Accounts._options; + Accounts._options = {}; + Accounts.config({ defaultFieldSelector: { ['profile.' + defaultExcludeField]: 0 } }); + + user = await Meteor.userAsync(); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile[excludeField], excludeValue); + test.equal(user.profile.name, username); + + // this time we only want certain fields... + + user = await Meteor.userAsync({ fields: { 'profile.name': 1 } }); + test.isUndefined(user.profile[excludeField]); + test.isUndefined(user.profile[defaultExcludeField]); + test.equal(user.profile.name, username); + Accounts._options = options; + removeTestUser(done); + }); + }); + } +); Tinytest.addAsync( 'accounts-2fa - Meteor.loginWithPasswordAnd2faCode() fails when token is not provided', diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index b94e927a2d..edca3cd31b 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -79,40 +79,6 @@ export class AccountsCommon { // should come up with a more generic way to do this (eg, with some sort of // symbolic error code rather than a number). this.LoginCancelledError.numericError = 0x8acdc2f; - - // loginServiceConfiguration and ConfigError are maintained for backwards compatibility - Meteor.startup(() => { - const { ServiceConfiguration } = Package['service-configuration']; - this.loginServiceConfiguration = ServiceConfiguration.configurations; - this.ConfigError = ServiceConfiguration.ConfigError; - - const settings = Meteor.settings?.packages?.['accounts-base']; - if (settings) { - if (settings.oauthSecretKey) { - if (!Package['oauth-encryption']) { - throw new Error( - 'The oauth-encryption package must be loaded to set oauthSecretKey' - ); - } - Package['oauth-encryption'].OAuthEncryption.loadKey( - settings.oauthSecretKey - ); - delete settings.oauthSecretKey; - } - // Validate config options keys - Object.keys(settings).forEach(key => { - if (!VALID_CONFIG_KEYS.includes(key)) { - // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? - throw new Meteor.Error( - `Accounts configuration: Invalid key: ${key}` - ); - } else { - // set values in Accounts._options - this._options[key] = settings[key]; - } - }); - } - }); } /** @@ -170,6 +136,18 @@ export class AccountsCommon { : null; } + /** + * @summary Get the current user record, or `null` if no user is logged in. + * @locus Anywhere + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ + async userAsync(options) { + const userId = this.userId(); + return userId + ? this.users.findOneAsync(userId, this._addDefaultFieldSelector(options)) + : null; + } // Set up config for the accounts system. Call this on both the client // and the server. // @@ -264,6 +242,7 @@ export class AccountsCommon { // Validate config options keys Object.keys(options).forEach(key => { if (!VALID_CONFIG_KEYS.includes(key)) { + // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? throw new Meteor.Error(`Accounts.config: Invalid key: ${key}`); } }); @@ -418,6 +397,15 @@ Meteor.userId = () => Accounts.userId(); */ Meteor.user = options => Accounts.user(options); +/** + * @summary Get the current user record, or `null` if no user is logged in. A reactive data source. + * @locus Anywhere but publish functions + * @importFromPackage meteor + * @param {Object} [options] + * @param {MongoFieldSpecifier} options.fields Dictionary of fields to return or exclude. + */ +Meteor.userAsync = options => Accounts.userAsync(options); + // how long (in days) until a login token expires const DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // how long (in days) until reset password token expires @@ -430,9 +418,6 @@ const DEFAULT_PASSWORD_ENROLL_TOKEN_EXPIRATION_DAYS = 30; const MIN_TOKEN_LIFETIME_CAP_SECS = 3600; // one hour // how often (in milliseconds) we check for expired tokens export const EXPIRE_TOKENS_INTERVAL_MS = 600 * 1000; // 10 minutes -// how long we wait before logging out clients when Meteor.logoutOtherClients is -// called -export const CONNECTION_CLOSE_DELAY_MS = 10 * 1000; // A large number of expiration days (approximately 100 years worth) that is // used when creating unexpiring tokens. const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100; diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index f677baa34c..2fd0a6d41b 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,4 +1,5 @@ import crypto from 'crypto'; +import { Meteor } from 'meteor/meteor' import { AccountsCommon, EXPIRE_TOKENS_INTERVAL_MS, @@ -434,7 +435,7 @@ export class AccountsServer extends AccountsCommon { // If the login is allowed and isn't aborted by a validate login hook // callback, log in the user. // - _attemptLogin( + async _attemptLogin( methodInvocation, methodName, methodArgs, @@ -494,18 +495,18 @@ export class AccountsServer extends AccountsCommon { // Ensure that thrown exceptions are caught and that login hook // callbacks are still called. // - _loginMethod( + async _loginMethod( methodInvocation, methodName, methodArgs, type, fn ) { - return this._attemptLogin( + return await this._attemptLogin( methodInvocation, methodName, methodArgs, - tryLoginMethod(type, fn) + await tryLoginMethod(type, fn) ); }; @@ -582,11 +583,10 @@ export class AccountsServer extends AccountsCommon { // Try all of the registered login handlers until one of them doesn't // return `undefined`, meaning it handled this call to `login`. Return // that return value. - _runLoginHandlers(methodInvocation, options) { + async _runLoginHandlers(methodInvocation, options) { for (let handler of this._loginHandlers) { - const result = tryLoginMethod( - handler.name, - () => handler.handler.call(methodInvocation, options) + const result = await tryLoginMethod(handler.name, async () => + await handler.handler.call(methodInvocation, options) ); if (result) { @@ -594,7 +594,10 @@ export class AccountsServer extends AccountsCommon { } if (result !== undefined) { - throw new Meteor.Error(400, "A login handler should return a result or undefined"); + throw new Meteor.Error( + 400, + 'A login handler should return a result or undefined' + ); } } @@ -639,14 +642,15 @@ export class AccountsServer extends AccountsCommon { // If successful, returns {token: reconnectToken, id: userId} // If unsuccessful (for example, if the user closed the oauth login popup), // throws an error describing the reason - methods.login = function (options) { + methods.login = async function (options) { // Login handlers should really also check whatever field they look at in // options, but we don't enforce it. check(options, Object); - const result = accounts._runLoginHandlers(this, options); + const result = await accounts._runLoginHandlers(this, options); + //console.log({result}); - return accounts._attemptLogin(this, "login", arguments, result); + return await accounts._attemptLogin(this, "login", arguments, result); }; methods.logout = function () { @@ -721,14 +725,19 @@ export class AccountsServer extends AccountsCommon { throw new Meteor.Error(403, "Service unknown"); } - const { ServiceConfiguration } = Package['service-configuration']; - if (ServiceConfiguration.configurations.findOne({service: options.service})) - throw new Meteor.Error(403, `Service ${options.service} already configured`); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + if (ServiceConfiguration.configurations.findOne({service: options.service})) + throw new Meteor.Error(403, `Service ${options.service} already configured`); - if (hasOwn.call(options, 'secret') && usingOAuthEncryption()) - options.secret = OAuthEncryption.seal(options.secret); + if (Package["oauth-encryption"]) { + const { OAuthEncryption } = Package["oauth-encryption"] + if (hasOwn.call(options, 'secret') && OAuthEncryption.keyIsLoaded()) + options.secret = OAuthEncryption.seal(options.secret); + } - ServiceConfiguration.configurations.insert(options); + ServiceConfiguration.configurations.insert(options); + } }; accounts._server.methods(methods); @@ -753,8 +762,10 @@ export class AccountsServer extends AccountsCommon { // Publish all login service configuration fields other than secret. this._server.publish("meteor.loginServiceConfiguration", () => { - const { ServiceConfiguration } = Package['service-configuration']; - return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + if (Package['service-configuration']) { + const { ServiceConfiguration } = Package['service-configuration']; + return ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}); + } }, {is_auto: true}); // not technically autopublish, but stops the warning. // Use Meteor.startup to give other packages a chance to call @@ -1507,10 +1518,10 @@ const cloneAttemptWithConnection = (connection, attempt) => { return clonedAttempt; }; -const tryLoginMethod = (type, fn) => { +const tryLoginMethod = async (type, fn) => { let result; try { - result = fn(); + result = await fn(); } catch (e) { result = {error: e}; @@ -1679,17 +1690,7 @@ const setExpireTokensInterval = accounts => { }, EXPIRE_TOKENS_INTERVAL_MS); }; -/// -/// OAuth Encryption Support -/// - -const OAuthEncryption = - Package["oauth-encryption"] && - Package["oauth-encryption"].OAuthEncryption; - -const usingOAuthEncryption = () => { - return OAuthEncryption && OAuthEncryption.keyIsLoaded(); -}; +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; // OAuth service data is temporarily stored in the pending credentials // collection during the oauth authentication process. Sensitive data @@ -1701,44 +1702,12 @@ const usingOAuthEncryption = () => { const pinEncryptedFieldsToUser = (serviceData, userId) => { Object.keys(serviceData).forEach(key => { let value = serviceData[key]; - if (OAuthEncryption && OAuthEncryption.isSealed(value)) + if (OAuthEncryption?.isSealed(value)) value = OAuthEncryption.seal(OAuthEncryption.open(value), userId); serviceData[key] = value; }); }; - -// Encrypt unencrypted login service secrets when oauth-encryption is -// added. -// -// XXX For the oauthSecretKey to be available here at startup, the -// developer must call Accounts.config({oauthSecretKey: ...}) at load -// time, instead of in a Meteor.startup block, because the startup -// block in the app code will run after this accounts-base startup -// block. Perhaps we need a post-startup callback? - -Meteor.startup(() => { - if (! usingOAuthEncryption()) { - return; - } - - const { ServiceConfiguration } = Package['service-configuration']; - - ServiceConfiguration.configurations.find({ - $and: [{ - secret: { $exists: true } - }, { - "secret.algorithm": { $exists: false } - }] - }).forEach(config => { - ServiceConfiguration.configurations.update(config._id, { - $set: { - secret: OAuthEncryption.seal(config.secret) - } - }); - }); -}); - // XXX see comment on Accounts.createUser in passwords_server about adding a // second "server options" argument. const defaultCreateUserHook = (options, user) => { diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index de870e0f81..797bd758f0 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -604,6 +604,62 @@ Tinytest.add( } ); + +Tinytest.addAsync( + 'accounts async - Meteor.userAsync() obeys options.defaultFieldSelector', + async test => { + const ignoreFieldName = "bigArray"; + const customField = "customField"; + const userId = Accounts.insertUserDoc({}, { username: Random.id(), [ignoreFieldName]: [1], [customField]: 'test' }); + const stampedToken = Accounts._generateStampedLoginToken(); + Accounts._insertLoginToken(userId, stampedToken); + const options = Accounts._options; + + // stub Meteor.userId() so it works outside methods and returns the correct user: + const origAccountsUserId = Accounts.userId; + Accounts.userId = () => userId; + + Accounts._options = {}; + + // test the field is included by default + let user = await Meteor.userAsync(); + test.isNotUndefined(user[ignoreFieldName], 'included by default'); + + // test the field is excluded + Accounts.config({ defaultFieldSelector: { [ignoreFieldName]: 0 } }); + user = await Meteor.userAsync(); + test.isUndefined(user[ignoreFieldName], 'excluded'); + user = await Meteor.userAsync({}); + test.isUndefined(user[ignoreFieldName], 'excluded {}'); + + // test the field can still be retrieved if required + user = await Meteor.userAsync({ fields: { [ignoreFieldName]: 1 } }); + test.isNotUndefined(user[ignoreFieldName], 'field can be retrieved'); + test.isUndefined(user.username, 'field can be retrieved username'); + + // test a combined negative field specifier + user = await Meteor.userAsync({ fields: { username: 0 } }); + test.isUndefined(user[ignoreFieldName], 'combined field selector'); + test.isUndefined(user.username, 'combined field selector username'); + + // test an explicit request for the full user object + user = await Meteor.userAsync({ fields: {} }); + test.isNotUndefined(user[ignoreFieldName], 'full selector'); + test.isNotUndefined(user.username, 'full selector username'); + + Accounts._options = {}; + + // Test that a custom field gets retrieved properly + Accounts.config({ defaultFieldSelector: { [customField]: 1 } }); + user = await Meteor.userAsync(); + test.isNotUndefined(user[customField]); + test.isUndefined(user.username); + test.isUndefined(user[ignoreFieldName]); + + Accounts._options = options; + Accounts.userId = origAccountsUserId; + } +); Tinytest.add( 'accounts - verify onExternalLogin hook can update oauth user profiles', test => { diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 90f03e6b50..61a19fd4ba 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'A user account system', - version: '2.2.5', + version: '2.2.6', }); Package.onUse(api => { @@ -15,10 +15,6 @@ Package.onUse(api => { api.use('reactive-var', 'client'); api.use('url', ['client', 'server']); - // use unordered to work around a circular dependency - // (service-configuration needs Accounts.connection) - api.use('service-configuration', ['client', 'server'], { unordered: true }); - // needed for getting the currently logged-in user and handling reconnects api.use('ddp', ['client', 'server']); diff --git a/packages/accounts-oauth/oauth_common.js b/packages/accounts-oauth/oauth_common.js index e0e1a1ad48..bfb99b0a5d 100644 --- a/packages/accounts-oauth/oauth_common.js +++ b/packages/accounts-oauth/oauth_common.js @@ -1,3 +1,24 @@ +import { Meteor } from 'meteor/meteor'; + +// TODO get from account-base +// config option keys +const VALID_CONFIG_KEYS = [ + 'sendVerificationEmail', + 'forbidClientAccountCreation', + 'passwordEnrollTokenExpiration', + 'passwordEnrollTokenExpirationInDays', + 'restrictCreationByEmailDomain', + 'loginExpirationInDays', + 'loginExpiration', + 'passwordResetTokenExpirationInDays', + 'passwordResetTokenExpiration', + 'ambiguousErrorMessages', + 'bcryptRounds', + 'defaultFieldSelector', + 'loginTokenExpirationHours', + 'tokenSequenceLength', +]; + Accounts.oauth = {}; const services = {}; @@ -31,3 +52,37 @@ Accounts.oauth.unregisterService = name => { }; Accounts.oauth.serviceNames = () => Object.keys(services); + +// loginServiceConfiguration and ConfigError are maintained for backwards compatibility +Meteor.startup(() => { + const { ServiceConfiguration } = Package['service-configuration']; + Accounts.loginServiceConfiguration = ServiceConfiguration.configurations; + Accounts.ConfigError = ServiceConfiguration.ConfigError; + + const settings = Meteor.settings?.packages?.['accounts-base']; + if (settings) { + if (settings.oauthSecretKey) { + if (!Package['oauth-encryption']) { + throw new Error( + 'The oauth-encryption package must be loaded to set oauthSecretKey' + ); + } + Package['oauth-encryption'].OAuthEncryption.loadKey( + settings.oauthSecretKey + ); + delete settings.oauthSecretKey; + } + // Validate config options keys + Object.keys(settings).forEach(key => { + if (!VALID_CONFIG_KEYS.includes(key)) { + // TODO Consider just logging a debug message instead to allow for additional keys in the settings here? + throw new Meteor.Error( + `Accounts configuration: Invalid key: ${key}` + ); + } else { + // set values in Accounts._options + Accounts._options[key] = settings[key]; + } + }); + } +}); diff --git a/packages/accounts-oauth/oauth_server.js b/packages/accounts-oauth/oauth_server.js index c76b2e439b..f8d67eff25 100644 --- a/packages/accounts-oauth/oauth_server.js +++ b/packages/accounts-oauth/oauth_server.js @@ -1,3 +1,5 @@ +import { Meteor } from 'meteor/meteor'; + // Listen to calls to `login` with an oauth option set. This is where // users actually get logged in to meteor via oauth. Accounts.registerLoginHandler(options => { @@ -55,3 +57,44 @@ Accounts.registerLoginHandler(options => { return Accounts.updateOrCreateUserFromExternalService(result.serviceName, result.serviceData, result.options); } }); + +/// +/// OAuth Encryption Support +/// + +const OAuthEncryption = Package["oauth-encryption"]?.OAuthEncryption; + +const usingOAuthEncryption = () => { + return OAuthEncryption?.keyIsLoaded(); +}; + +// Encrypt unencrypted login service secrets when oauth-encryption is +// added. +// +// XXX For the oauthSecretKey to be available here at startup, the +// developer must call Accounts.config({oauthSecretKey: ...}) at load +// time, instead of in a Meteor.startup block, because the startup +// block in the app code will run after this accounts-base startup +// block. Perhaps we need a post-startup callback? + +Meteor.startup(() => { + if (! usingOAuthEncryption()) { + return; + } + + const { ServiceConfiguration } = Package['service-configuration']; + + ServiceConfiguration.configurations.find({ + $and: [{ + secret: { $exists: true } + }, { + "secret.algorithm": { $exists: false } + }] + }).forEach(config => { + ServiceConfiguration.configurations.update(config._id, { + $set: { + secret: OAuthEncryption.seal(config.secret) + } + }); + }); +}); diff --git a/packages/accounts-oauth/package.js b/packages/accounts-oauth/package.js index f20513769d..d26a1ff571 100644 --- a/packages/accounts-oauth/package.js +++ b/packages/accounts-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based login services", - version: "1.4.1", + version: "1.4.2", }); Package.onUse(api => { @@ -9,6 +9,11 @@ Package.onUse(api => { api.use(['accounts-base', 'ecmascript'], ['client', 'server']); // Export Accounts (etc) to packages using this one. api.imply('accounts-base', ['client', 'server']); + + // use unordered to work around a circular dependency + // (service-configuration needs Accounts.connection) + api.use('service-configuration', ['client', 'server'], { unordered: true }); + api.use('oauth'); api.addFiles('oauth_common.js'); diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c4f9cadbd3..719191d8dc 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -5,7 +5,7 @@ Package.describe({ // 2.2.x in the future. The version was also bumped to 2.0.0 temporarily // during the Meteor 1.5.1 release process, so versions 2.0.0-beta.2 // through -beta.5 and -rc.0 have already been published. - version: '2.3.1', + version: '2.3.2', }); Npm.depends({ diff --git a/packages/accounts-password/password_client.js b/packages/accounts-password/password_client.js index 5d1279782b..30d3b49450 100644 --- a/packages/accounts-password/password_client.js +++ b/packages/accounts-password/password_client.js @@ -7,12 +7,10 @@ const reportError = (error, callback) => { } }; - const internalLoginWithPassword = ({ selector, password, code, callback }) => { if (typeof selector === 'string') if (!selector.includes('@')) selector = { username: selector }; else selector = { email: selector }; - Accounts.callLoginMethod({ methodArguments: [ { diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index ea1236313c..c44be77f66 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -1,8 +1,5 @@ -import bcrypt from 'bcrypt' -import {Accounts} from "meteor/accounts-base"; - -const bcryptHash = Meteor.wrapAsync(bcrypt.hash); -const bcryptCompare = Meteor.wrapAsync(bcrypt.compare); +import { hash as bcryptHash, compare as bcryptCompare } from 'bcrypt'; +import { Accounts } from "meteor/accounts-base"; // Utility for grabbing user const getUserById = (id, options) => Meteor.users.findOne(id, Accounts._addDefaultFieldSelector(options)); @@ -48,9 +45,9 @@ const getPasswordString = password => { // SHA256 before bcrypt) or an object with properties `digest` and // `algorithm` (in which case we bcrypt `password.digest`). // -const hashPassword = password => { +const hashPassword = async password => { password = getPasswordString(password); - return bcryptHash(password, Accounts._bcryptRounds()); + return await bcryptHash(password, Accounts._bcryptRounds()); }; // Extract the number of rounds used in the specified bcrypt hash. @@ -74,7 +71,7 @@ const getRoundsFromBcryptHash = hash => { // The user parameter needs at least user._id and user.services Accounts._checkPasswordUserFields = {_id: 1, services: 1}; // -Accounts._checkPassword = (user, password) => { +const checkPasswordAsync = async (user, password) => { const result = { userId: user._id }; @@ -83,15 +80,16 @@ Accounts._checkPassword = (user, password) => { const hash = user.services.password.bcrypt; const hashRounds = getRoundsFromBcryptHash(hash); - if (! bcryptCompare(formattedPassword, hash)) { + if (! await bcryptCompare(formattedPassword, hash)) { result.error = Accounts._handleError("Incorrect password", false); } else if (hash && Accounts._bcryptRounds() != hashRounds) { // The password checks out, but the user's bcrypt hash needs to be updated. - Meteor.defer(() => { + + Meteor.defer(async () => { Meteor.users.update({ _id: user._id }, { $set: { 'services.password.bcrypt': - bcryptHash(formattedPassword, Accounts._bcryptRounds()) + await bcryptHash(formattedPassword, Accounts._bcryptRounds()) } }); }); @@ -99,7 +97,13 @@ Accounts._checkPassword = (user, password) => { return result; }; -const checkPassword = Accounts._checkPassword; + +const checkPassword = (user, password) => { + return Promise.await(checkPasswordAsync(user, password)); +}; + +Accounts._checkPassword = checkPassword; +Accounts._checkPasswordAsync = checkPasswordAsync; /// /// LOGIN @@ -163,7 +167,7 @@ const passwordValidator = Match.OneOf( // // Note that neither password option is secure without SSL. // -Accounts.registerLoginHandler("password", options => { +Accounts.registerLoginHandler("password", async options => { if (!options.password) return undefined; // don't handle @@ -188,7 +192,7 @@ Accounts.registerLoginHandler("password", options => { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, options.password); + const result = await checkPasswordAsync(user, options.password); // This method is added by the package accounts-2fa // First the login is validated, then the code situation is checked if ( @@ -258,7 +262,7 @@ Accounts.setUsername = (userId, newUsername) => { // Let the user change their own password if they know the old // password. `oldPassword` and `newPassword` should be objects with keys // `digest` and `algorithm` (representing the SHA256 of the password). -Meteor.methods({changePassword: function (oldPassword, newPassword) { +Meteor.methods({changePassword: async function (oldPassword, newPassword) { check(oldPassword, passwordValidator); check(newPassword, passwordValidator); @@ -278,12 +282,12 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { Accounts._handleError("User has no password set"); } - const result = checkPassword(user, oldPassword); + const result = await checkPasswordAsync(user, oldPassword); if (result.error) { throw result.error; } - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // It would be better if this removed ALL existing tokens and replaced // the token for the current connection with a new one, but that would @@ -316,10 +320,10 @@ Meteor.methods({changePassword: function (oldPassword, newPassword) { * @param {Object} options.logout Logout all current connections with this userId (default: true) * @importFromPackage accounts-base */ -Accounts.setPassword = (userId, newPlaintextPassword, options) => { - check(userId, String) - check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)) - check(options, Match.Maybe({ logout: Boolean })) +Accounts.setPasswordAsync = async (userId, newPlaintextPassword, options) => { + check(userId, String); + check(newPlaintextPassword, Match.Where(str => Match.test(str, String) && str.length <= Meteor.settings?.packages?.accounts?.passwordMaxLength || 256)); + check(options, Match.Maybe({ logout: Boolean })); options = { logout: true , ...options }; const user = getUserById(userId, {fields: {_id: 1}}); @@ -331,7 +335,7 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { $unset: { 'services.password.reset': 1 }, - $set: {'services.password.bcrypt': hashPassword(newPlaintextPassword)} + $set: {'services.password.bcrypt': await hashPassword(newPlaintextPassword)} }; if (options.logout) { @@ -341,6 +345,19 @@ Accounts.setPassword = (userId, newPlaintextPassword, options) => { Meteor.users.update({_id: user._id}, update); }; +/** + * @summary Forcibly change the password for a user. + * @locus Server + * @param {String} userId The id of the user to update. + * @param {String} newPassword A new password for the user. + * @param {Object} [options] + * @param {Object} options.logout Logout all current connections with this userId (default: true) + * @importFromPackage accounts-base + */ +Accounts.setPassword = (userId, newPlaintextPassword, options) => { + return Promise.await(Accounts.setPasswordAsync(userId, newPlaintextPassword, options)); +}; + /// /// RESETTING VIA EMAIL @@ -560,15 +577,15 @@ Accounts.sendEnrollmentEmail = (userId, email, extraTokenData, extraParams) => { // Take token from sendResetPasswordEmail or sendEnrollmentEmail, change // the users password, and log them in. -Meteor.methods({resetPassword: function (...args) { +Meteor.methods({resetPassword: async function (...args) { const token = args[0]; const newPassword = args[1]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "resetPassword", args, "password", - () => { + async () => { check(token, String); check(newPassword, passwordValidator); @@ -617,7 +634,7 @@ Meteor.methods({resetPassword: function (...args) { error: new Meteor.Error(403, "Token has invalid email address") }; - const hashed = hashPassword(newPassword); + const hashed = await hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be // logged in as. Make sure to avoid logging ourselves out if this @@ -712,9 +729,9 @@ Accounts.sendVerificationEmail = (userId, email, extraTokenData, extraParams) => // Take token from sendVerificationEmail, mark the email as verified, // and log them in. -Meteor.methods({verifyEmail: function (...args) { +Meteor.methods({verifyEmail: async function (...args) { const token = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "verifyEmail", args, @@ -888,7 +905,7 @@ Accounts.removeEmail = (userId, email) => { // does the actual user insertion. // // returns the user id -const createUser = options => { +const createUser = async options => { // Unknown keys allowed, because a onCreateUserHook can take arbitrary // options. check(options, Match.ObjectIncluding({ @@ -903,22 +920,22 @@ const createUser = options => { const user = {services: {}}; if (password) { - const hashed = hashPassword(password); + const hashed = await hashPassword(password); user.services.password = { bcrypt: hashed }; } - return Accounts._createUserCheckingDuplicates({ user, email, username, options }) + return Accounts._createUserCheckingDuplicates({ user, email, username, options }); }; // method for create user. Requests come from the client. -Meteor.methods({createUser: function (...args) { +Meteor.methods({createUser: async function (...args) { const options = args[0]; - return Accounts._loginMethod( + return await Accounts._loginMethod( this, "createUser", args, "password", - () => { + async () => { // createUser() above does more checking. check(options, Object); if (Accounts._options.forbidClientAccountCreation) @@ -926,7 +943,7 @@ Meteor.methods({createUser: function (...args) { error: new Meteor.Error(403, "Signups forbidden") }; - const userId = Accounts.createUserVerifyingEmail(options); + const userId = await Accounts.createUserVerifyingEmail(options); // client gets logged in as the new user afterwards. return {userId: userId}; @@ -948,10 +965,10 @@ Meteor.methods({createUser: function (...args) { * @param {Object} options.profile The user's profile, typically including the `name` field. * @importFromPackage accounts-base * */ -Accounts.createUserVerifyingEmail = (options) => { +Accounts.createUserVerifyingEmail = async (options) => { options = { ...options }; // Create user. result contains id and token. - const userId = createUser(options); + const userId = await createUser(options); // safety belt. createUser is supposed to throw on error. send 500 error // instead of sending a verification email with empty userid. if (! userId) @@ -976,14 +993,15 @@ Accounts.createUserVerifyingEmail = (options) => { // Unlike the client version, this does not log you in as this user // after creation. // -// returns userId or throws an error if it can't create +// returns Promise or throws an error if it can't create // // XXX add another argument ("server options") that gets sent to onCreateUser, // which is always empty when called from the createUser method? eg, "admin: // true", which we want to prevent the client from setting, but which a custom // method calling Accounts.createUser could set? // -Accounts.createUser = (options, callback) => { + +Accounts.createUserAsync = async (options, callback) => { options = { ...options }; // XXX allow an optional callback? @@ -994,6 +1012,23 @@ Accounts.createUser = (options, callback) => { return createUser(options); }; +// Create user directly on the server. +// +// Unlike the client version, this does not log you in as this user +// after creation. +// +// returns userId or throws an error if it can't create +// +// XXX add another argument ("server options") that gets sent to onCreateUser, +// which is always empty when called from the createUser method? eg, "admin: +// true", which we want to prevent the client from setting, but which a custom +// method calling Accounts.createUser could set? +// + +Accounts.createUser = (options, callback) => { + return Promise.await(Accounts.createUserAsync(options, callback)); +}; + /// /// PASSWORD-SPECIFIC INDEXES ON USERS /// diff --git a/packages/accounts-password/password_tests.js b/packages/accounts-password/password_tests.js index 23e7e6ca8c..0266c977f2 100644 --- a/packages/accounts-password/password_tests.js +++ b/packages/accounts-password/password_tests.js @@ -1747,7 +1747,7 @@ if (Meteor.isServer) (() => { Tinytest.addAsync( 'passwords - allow custom bcrypt rounds', - (test, done) => { + async (test, done) => { const getUserHashRounds = user => Number(user.services.password.bcrypt.substring(4, 6)); @@ -1768,7 +1768,7 @@ if (Meteor.isServer) (() => { const defaultRounds = Accounts._bcryptRounds(); const customRounds = 11; Accounts._options.bcryptRounds = customRounds; - Accounts._checkPassword(user1, password); + await Accounts._checkPasswordAsync(user1, password); Meteor.setTimeout(() => { user1 = Meteor.users.findOne(userId1); rounds = getUserHashRounds(user1); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 4453e83e92..453a9ea4d2 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -2,206 +2,213 @@ "lockfileVersion": 1, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + } + } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", + "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==" }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==" }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==" }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==" }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -219,9 +226,9 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", @@ -249,139 +256,139 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", + "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==" }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==" }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==" }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", + "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==" }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==" }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" }, "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" }, "@babel/runtime": { "version": "7.17.2", @@ -389,39 +396,49 @@ "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==" }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" }, "@meteorjs/babel": { - "version": "7.16.0-beta.1", - "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.16.0-beta.1.tgz", - "integrity": "sha512-PSyp2+oO2nrGMBTXd3VAP0EzHLW4bFqRIzmbTfHnr/s0dGhb7XaaGg3sOGAInewrFNCWfMHNe3hSiyOvC9bS2A==" + "version": "7.17.2-beta.0", + "resolved": "https://registry.npmjs.org/@meteorjs/babel/-/babel-7.17.2-beta.0.tgz", + "integrity": "sha512-gFXgGNIUu2mVvLRTtEPRE8OdpbdwDY2+vAOSn4/O//w42n7xKBDuYkiyNQtXCWIVuEjO4UBFkX2CHD88eTKhxA==" }, "@meteorjs/reify": { "version": "0.23.0", @@ -436,9 +453,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "acorn": { "version": "6.4.2", @@ -463,38 +480,33 @@ "babel-helper-flip-expressions": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" }, "babel-helper-is-void-0": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" }, "babel-helper-mark-eval-scopes": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" }, "babel-helper-remove-or-void": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" }, "babel-helper-to-multiple-sequence-expressions": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - }, "babel-plugin-minify-builtins": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", @@ -506,14 +518,14 @@ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==" }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==" }, "babel-plugin-minify-flip-comparisons": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=" + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==" }, "babel-plugin-minify-guarded-expressions": { "version": "0.4.4", @@ -523,17 +535,17 @@ "babel-plugin-minify-infinity": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" }, "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==" }, "babel-plugin-minify-numeric-literals": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" }, "babel-plugin-minify-replace": { "version": "0.5.0", @@ -548,62 +560,62 @@ "babel-plugin-minify-type-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=" + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" }, "babel-plugin-transform-member-expression-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" }, "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" }, "babel-plugin-transform-minify-booleans": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" }, "babel-plugin-transform-property-literals": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=" + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==" }, "babel-plugin-transform-regexp-constructors": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" }, "babel-plugin-transform-remove-console": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" }, "babel-plugin-transform-remove-debugger": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" }, "babel-plugin-transform-remove-undefined": { "version": "0.5.0", @@ -613,12 +625,12 @@ "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" }, "babel-plugin-transform-undefined-to-void": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" }, "babel-preset-meteor": { "version": "7.10.0", @@ -626,24 +638,19 @@ "integrity": "sha512-bcdNfRCQAjTV42cUcmaG5/ltLZZQLpZajUcP+o0Lr+aLTY/XLNkGfASM5383wdXiAkEFl0sDOXeknnLlQtrmdg==" }, "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.2.tgz", + "integrity": "sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==" }, "browserslist": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", - "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==" + "version": "1.0.30001436", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", + "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" }, "chalk": { "version": "2.4.2", @@ -658,39 +665,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "escalade": { "version": "3.1.1", @@ -700,7 +695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "estree-walker": { "version": "2.0.2", @@ -722,11 +717,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -740,17 +730,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" }, "is-reference": { "version": "1.2.1", @@ -780,22 +765,22 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" }, "meteor-babel-helpers": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/meteor-babel-helpers/-/meteor-babel-helpers-0.0.3.tgz", - "integrity": "sha1-8uXZ+HlvvS6JAQI9dpnlsgLqn7A=" + "integrity": "sha512-PgfmiyT/HiBaxwGHxS4t3Qi0fpmEW3O0WW2VfrgekiMGz3aZPd9/4PRIaMMZsfyjQ1vyEm6dZqTAFZENbuoTxw==" }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "ms": { "version": "2.1.2", @@ -803,19 +788,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "path-parse": { "version": "1.0.7", @@ -838,62 +813,52 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==" }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -912,12 +877,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -930,14 +895,19 @@ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" } } } diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index be0b0b6110..a3ecdbed82 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -1,11 +1,11 @@ Package.describe({ name: "babel-compiler", summary: "Parser/transpiler for ECMAScript 2015+ syntax", - version: '7.9.0' + version: '7.10.1' }); Npm.depends({ - '@meteorjs/babel': '7.16.1-beta.0', + '@meteorjs/babel': '7.17.2-beta.0', 'json5': '2.1.1' }); diff --git a/packages/ecmascript/package.js b/packages/ecmascript/package.js index adb2b73436..a43b8dec7e 100644 --- a/packages/ecmascript/package.js +++ b/packages/ecmascript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'ecmascript', - version: '0.16.3', + version: '0.16.4', summary: 'Compiler plugin that supports ES2015+ in all .js files', documentation: 'README.md', }); diff --git a/packages/email/email.js b/packages/email/email.js index 3f64e23692..eed8dbd9b3 100644 --- a/packages/email/email.js +++ b/packages/email/email.js @@ -2,7 +2,6 @@ import { Meteor } from 'meteor/meteor'; import { Log } from 'meteor/logging'; import { Hook } from 'meteor/callback-hook'; -import Future from 'fibers/future'; import url from 'url'; import nodemailer from 'nodemailer'; import wellKnow from 'nodemailer/lib/well-known'; @@ -25,7 +24,7 @@ export const EmailInternals = { const MailComposer = EmailInternals.NpmModules.mailcomposer.module; -const makeTransport = function(mailUrlString) { +const makeTransport = function (mailUrlString) { const mailUrl = new URL(mailUrlString); if (mailUrl.protocol !== 'smtp:' && mailUrl.protocol !== 'smtps:') { @@ -60,7 +59,7 @@ const makeTransport = function(mailUrlString) { }; // More info: https://nodemailer.com/smtp/well-known/ -const knownHostsTransport = function(settings = undefined, url = undefined) { +const knownHostsTransport = function (settings = undefined, url = undefined) { let service, user, password; const hasSettings = settings && Object.keys(settings).length; @@ -110,7 +109,7 @@ const knownHostsTransport = function(settings = undefined, url = undefined) { }; EmailTest.knowHostsTransport = knownHostsTransport; -const getTransport = function() { +const getTransport = function () { const packageSettings = Meteor.settings.packages?.email || {}; // We delay this check until the first call to Email.send, in case someone // set process.env.MAIL_URL in startup code. Then we store in a cache until @@ -138,40 +137,40 @@ const getTransport = function() { }; let nextDevModeMailId = 0; -let output_stream = process.stdout; + +EmailTest._getAndIncNextDevModeMailId = function () { + return nextDevModeMailId++; +}; // Testing hooks -EmailTest.overrideOutputStream = function(stream) { +EmailTest.resetNextDevModeMailId = function () { nextDevModeMailId = 0; - output_stream = stream; }; -EmailTest.restoreOutputStream = function() { - output_stream = process.stdout; -}; +const devModeSendAsync = function (mail, options) { + const stream = options?.stream || process.stdout; + return new Promise((resolve, reject) => { + let devModeMailId = EmailTest._getAndIncNextDevModeMailId(); -const devModeSend = function(mail) { - let devModeMailId = nextDevModeMailId++; - - const stream = output_stream; - - // This approach does not prevent other writers to stdout from interleaving. - stream.write('====== BEGIN MAIL #' + devModeMailId + ' ======\n'); - stream.write( - '(Mail not sent; to enable sending, set the MAIL_URL ' + + // This approach does not prevent other writers to stdout from interleaving. + const output = ['====== BEGIN MAIL #' + devModeMailId + ' ======\n']; + output.push( + '(Mail not sent; to enable sending, set the MAIL_URL ' + 'environment variable.)\n' - ); - const readStream = new MailComposer(mail).compile().createReadStream(); - readStream.pipe(stream, { end: false }); - const future = new Future(); - readStream.on('end', function() { - stream.write('====== END MAIL #' + devModeMailId + ' ======\n'); - future.return(); + ); + const readStream = new MailComposer(mail).compile().createReadStream(); + readStream.on('data', buffer => { + output.push(buffer.toString()); + }); + readStream.on('end', function () { + output.push('====== END MAIL #' + devModeMailId + ' ======\n'); + stream.write(output.join(''), () => resolve()); + }); + readStream.on('error', (err) => reject(err)); }); - future.wait(); }; -const smtpSend = function(transport, mail) { +const smtpSend = function (transport, mail) { transport._syncSendMail(mail); }; @@ -186,7 +185,7 @@ const sendHooks = new Hook(); * false to skip sending. * @returns {{ stop: function, callback: function }} */ -Email.hookSend = function(f) { +Email.hookSend = function (f) { return sendHooks.register(f); }; @@ -231,25 +230,77 @@ Email.customTransport = undefined; * You can create a `MailComposer` object via * `new EmailInternals.NpmModules.mailcomposer.module`. */ -Email.send = function(options) { - if (options.mailComposer) { - options = options.mailComposer.mail; +Email.send = function (options) { + if (Email.customTransport) { + // Preserve current behavior + const email = options.mailComposer ? options.mailComposer.mail : options; + let send = true; + sendHooks.forEach((hook) => { + send = hook(email); + return send; + }); + if (!send) { + return; + } + const packageSettings = Meteor.settings.packages?.email || {}; + Email.customTransport({ packageSettings, ...email }); + return; } + // Using Fibers Promise.await + return Promise.await(Email.sendAsync(options)); +}; + +/** + * @summary Send an email with asyncronous method. Capture Throws an `Error` on failure to contact mail server + * or if mail server returns an error. All fields should match + * [RFC5322](http://tools.ietf.org/html/rfc5322) specification. + * + * If the `MAIL_URL` environment variable is set, actually sends the email. + * Otherwise, prints the contents of the email to standard out. + * + * Note that this package is based on **nodemailer**, so make sure to refer to + * [the documentation](http://nodemailer.com/) + * when using the `attachments` or `mailComposer` options. + * + * @locus Server + * @return {Promise} + * @param {Object} options + * @param {String} [options.from] "From:" address (required) + * @param {String|String[]} options.to,cc,bcc,replyTo + * "To:", "Cc:", "Bcc:", and "Reply-To:" addresses + * @param {String} [options.inReplyTo] Message-ID this message is replying to + * @param {String|String[]} [options.references] Array (or space-separated string) of Message-IDs to refer to + * @param {String} [options.messageId] Message-ID for this message; otherwise, will be set to a random value + * @param {String} [options.subject] "Subject:" line + * @param {String} [options.text|html] Mail body (in plain text and/or HTML) + * @param {String} [options.watchHtml] Mail body in HTML specific for Apple Watch + * @param {String} [options.icalEvent] iCalendar event attachment + * @param {Object} [options.headers] Dictionary of custom headers - e.g. `{ "header name": "header value" }`. To set an object under a header name, use `JSON.stringify` - e.g. `{ "header name": JSON.stringify({ tracking: { level: 'full' } }) }`. + * @param {Object[]} [options.attachments] Array of attachment objects, as + * described in the [nodemailer documentation](https://nodemailer.com/message/attachments/). + * @param {MailComposer} [options.mailComposer] A [MailComposer](https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields) + * object representing the message to be sent. Overrides all other options. + * You can create a `MailComposer` object via + * `new EmailInternals.NpmModules.mailcomposer.module`. + */ +Email.sendAsync = async function (options) { + + const email = options.mailComposer ? options.mailComposer.mail : options; let send = true; - sendHooks.forEach(hook => { - send = hook(options); + sendHooks.forEach((hook) => { + send = hook(email); return send; }); - if (!send) return; - - const customTransport = Email.customTransport; - if (customTransport) { - const packageSettings = Meteor.settings.packages?.email || {}; - customTransport({ packageSettings, ...options }); + if (!send) { return; } + if (Email.customTransport) { + const packageSettings = Meteor.settings.packages?.email || {}; + return Email.customTransport({ packageSettings, ...email }); + } + const mailUrlEnv = process.env.MAIL_URL; const mailUrlSettings = Meteor.settings.packages?.email; @@ -263,8 +314,8 @@ Email.send = function(options) { if (mailUrlEnv || mailUrlSettings) { const transport = getTransport(); - smtpSend(transport, options); + smtpSend(transport, email); return; } - devModeSend(options); + return devModeSendAsync(email, options); }; diff --git a/packages/email/email_test_helpers.js b/packages/email/email_test_helpers.js new file mode 100644 index 0000000000..a8706ab1c9 --- /dev/null +++ b/packages/email/email_test_helpers.js @@ -0,0 +1,21 @@ +import streamBuffers from 'stream-buffers'; + +export const devWarningBanner = + '(Mail not sent; to enable ' + + 'sending, set the MAIL_URL environment variable.)\n'; + +export const smokeEmailTest = (testFunction) => { + // This only tests dev mode, so don't run the test if this is deployed. + if (process.env.MAIL_URL) return; + const stream = new streamBuffers.WritableStreamBuffer(); + EmailTest.resetNextDevModeMailId(); + testFunction(stream); +}; + +export const canonicalize = (string) => { + // Remove generated content for test.equal to succeed. + return string + .replace(/Message-ID: <[^<>]*>\r\n/, 'Message-ID: <...>\r\n') + .replace(/Date: (?!dummy).*\r\n/, 'Date: ...\r\n') + .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/gm, '$1--...$2'); +}; diff --git a/packages/email/email_tests.js b/packages/email/email_tests.js index 877264ce95..6f016f26b9 100644 --- a/packages/email/email_tests.js +++ b/packages/email/email_tests.js @@ -1,304 +1,85 @@ -import streamBuffers from 'stream-buffers'; +import { Email } from 'meteor/email'; +import { smokeEmailTest } from './email_test_helpers'; +import { TEST_CASES } from './email_tests_data'; -const devWarningBanner = "(Mail not sent; to enable " + - "sending, set the MAIL_URL environment variable.)\n"; +const CUSTOM_TRANSPORT_SETTINGS = { + email: { service: '1on1', user: 'test', password: 'pwd' }, +}; -function smokeEmailTest(testFunction) { - // This only tests dev mode, so don't run the test if this is deployed. - if (process.env.MAIL_URL) return; +const sleep = (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; - try { - const stream = new streamBuffers.WritableStreamBuffer; - EmailTest.overrideOutputStream(stream); +// Create dynamic sync tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.add(`[Sync] ${title}`, function (test) { + smokeEmailTest((stream) => { + Object.entries(options).forEach(([key, option]) => { + const testCall = testCalls[key]; + Email.send({ ...option, stream }); + testCall(test, stream); + }); + }); + }); +}); - testFunction(stream); +// Create dynamic async tests +TEST_CASES.forEach(({ title, options, testCalls }) => { + Tinytest.addAsync(`[Async] ${title}`, function (test, onComplete) { + smokeEmailTest((stream) => { + const allPromises = Object.entries(options).map(([key, option]) => { + const testCall = testCalls[key]; + return Email.sendAsync({ ...option, stream }).then(() => { + testCall(test, stream); + }); + }); + Promise.all(allPromises).then(() => onComplete()); + }); + }); +}); - } finally { - EmailTest.restoreOutputStream(); +// Individual sync tests + +Tinytest.add( + '[Sync] email - alternate API is used for sending gets data', + function (test) { + smokeEmailTest(function (stream) { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }); + test.equal(stream.getContentsAsString('utf8'), false); + }); + + smokeEmailTest(function (stream) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }); + + test.equal(stream.getContentsAsString('utf8'), false); + }); + Email.customTransport = undefined; + Meteor.settings.packages = undefined; } -} +); -function canonicalize(string) { - // Remove generated content for test.equal to succeed. - return string.replace(/Message-ID: <[^<>]*>\r\n/, "Message-ID: <...>\r\n") - .replace(/Date: (?!dummy).*\r\n/, "Date: ...\r\n") - .replace(/(boundary="|^--)--[^\s"]+?(-Part|")/mg, "$1--...$2"); -} - -Tinytest.add("email - fully customizable", function (test) { - smokeEmailTest(function(stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - cc: ["friends@example.com", "enemies@example.com"], - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - 'Date': 'dummy', - }, - }); - // XXX brittle if mailcomposer changes header order, etc - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "X-Meteor-Test: a custom header\r\n" + - "Date: dummy\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Cc: friends@example.com, enemies@example.com\r\n" + - "Subject: This is the subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is the body\n" + - "of the message\n" + - "From us.\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - undefined headers sends properly", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m); - }); -}); - -Tinytest.add("email - multiple e-mails same stream", function (test) { - smokeEmailTest(function (stream) { - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - }); - - const contents = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); - test.matches(contents, /^From: foo@example.com$/m); - test.matches(contents, /^To: bar@example.com$/m); - - Email.send({ - from: "qux@example.com", - to: "baz@example.com", - subject: "This is important", - text: "This is another message\nFrom Qux.", - }); - - const contents2 = canonicalize(stream.getContentsAsString("utf8")); - test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); - test.matches(contents2, /^From: qux@example.com$/m); - test.matches(contents2, /^To: baz@example.com$/m); - - }); -}); - -Tinytest.add("email - using mail composer", function (test) { - smokeEmailTest(function (stream) { - // Test direct MailComposer usage. - const mc = new EmailInternals.NpmModules.mailcomposer.module({ - from: "a@b.com", - text: "body" - }); - Email.send({mailComposer: mc}); - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: a@b.com\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "body\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - date auto generated", function (test) { - smokeEmailTest(function (stream) { - // Test if date header is automatically generated, if not specified - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is the subject", - text: "This is the body\nof the message\nFrom us.", - headers: { - 'X-Meteor-Test': 'a custom header', - }, - }); - - test.matches(canonicalize(stream.getContentsAsString("utf8")), - /^Date: .+$/m); - }); -}); - -Tinytest.add("email - long lines", function (test) { - smokeEmailTest(function (stream) { - // Test that long header lines get wrapped with single leading whitespace, - // and that long body lines get wrapped with quoted-printable conventions. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "This is a very very very very very very very very very very very very long subject", - text: "This is a very very very very very very very very very very very very long text", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: This is a very very very very very very very very " + - "very very very\r\n very long subject\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "This is a very very very very very very very very very very " + - "very very long =\r\ntext\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - unicode", function (test) { - smokeEmailTest(function (stream) { - // Test that unicode characters in header and body get encoded. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - subject: "\u263a", - text: "I \u2665 Meteor", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: text/plain; charset=utf-8\r\n" + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Subject: =?UTF-8?B?4pi6?=\r\n" + - "Message-ID: <...>\r\n" + - "Content-Transfer-Encoding: quoted-printable\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "I =E2=99=A5 Meteor\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - text and html", function (test) { - smokeEmailTest(function (stream) { - // Test including both text and HTML versions of message. - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(canonicalize(stream.getContentsAsString("utf8")), - "====== BEGIN MAIL #0 ======\n" + - devWarningBanner + - "Content-Type: multipart/alternative;\r\n" + - ' boundary="--...-Part_1"\r\n' + - "From: foo@example.com\r\n" + - "To: bar@example.com\r\n" + - "Message-ID: <...>\r\n" + - "Date: ...\r\n" + - "MIME-Version: 1.0\r\n" + - "\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/plain; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "*Cool*, man\r\n" + - "----...-Part_1\r\n" + - "Content-Type: text/html; charset=utf-8\r\n" + - "Content-Transfer-Encoding: 7bit\r\n" + - "\r\n" + - "Cool, man\r\n" + - "----...-Part_1--\r\n" + - "====== END MAIL #0 ======\n"); - }); -}); - -Tinytest.add("email - alternate API is used for sending gets data", function(test) { - smokeEmailTest(function(stream) { - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - }; - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - test.equal(stream.getContentsAsString("utf8"), false); - }); - - smokeEmailTest(function(stream) { - Meteor.settings.packages = { email: { service: '1on1', user: 'test', password: 'pwd' } }; - Email.customTransport = (options) => { - test.equal(options.from, 'foo@example.com'); - test.equal(options.packageSettings?.service, '1on1'); - }; - - Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", - }); - - test.equal(stream.getContentsAsString("utf8"), false); - }); - Email.customTransport = undefined; - Meteor.settings.packages = undefined; -}); - -Tinytest.add("email - URL string for known hosts", function(test) { - const oneTransport = EmailTest.knowHostsTransport({ service: '1und1', user: 'test', password: 'pwd' }); - test.equal(oneTransport.transporter.auth.type, 'LOGIN'); - test.equal(oneTransport.transporter.auth.user, 'test'); - - const aolUrlTransport = EmailTest.knowHostsTransport(null, 'AOL://test:pwd@aol.com'); - test.equal(aolUrlTransport.transporter.auth.user, 'test'); - test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); - - const outlookTransport = EmailTest.knowHostsTransport(null, 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com'); - const outlookTransport2 = EmailTest.knowHostsTransport(undefined, 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com'); - test.equal(outlookTransport.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.options.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport.transporter.options.service, 'outlook365'); - test.equal(outlookTransport2.transporter.auth.user, 'firstname.lastname%40hotmail.com'); - test.equal(outlookTransport2.transporter.options.service, 'outlook365'); - - const hotmailTransport = EmailTest.knowHostsTransport(undefined, 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com'); - console.dir(hotmailTransport); - test.equal(hotmailTransport.transporter.options.service, 'hotmail'); - - const falseService = { service: '1on1', user: 'test', password: 'pwd' }; - const errorMsg = 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; - test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); - test.throws(() => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), errorMsg); -}); - -Tinytest.add("email - hooks stop the sending", function(test) { +Tinytest.add('[Sync] email - hooks stop the sending', function (test) { // Register hooks const hook1 = Email.hookSend((options) => { // Test that we get options through @@ -313,17 +94,218 @@ Tinytest.add("email - hooks stop the sending", function(test) { const hook3 = Email.hookSend(() => { console.log('FAIL'); }); - smokeEmailTest(function(stream) { + smokeEmailTest(function (stream) { Email.send({ - from: "foo@example.com", - to: "bar@example.com", - text: "*Cool*, man", - html: "Cool, man", + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, }); - test.equal(stream.getContentsAsString("utf8"), false); + test.equal(stream.getContentsAsString('utf8'), false); }); hook1.stop(); hook2.stop(); hook3.stop(); }); + +// Individual Async tests + +Tinytest.addAsync( + '[Async] email - alternate API is used for sending gets data', + function (test, onComplete) { + const allPromises = []; + smokeEmailTest((stream) => { + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + }; + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + + smokeEmailTest(function (stream) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + + allPromises.push( + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + }) + ); + }); + Promise.all(allPromises).then(() => { + Email.customTransport = undefined; + Meteor.settings.packages = undefined; + onComplete(); + }); + } +); + +Tinytest.addAsync( + '[Async] email - hooks stop the sending', + function (test, onComplete) { + // Register hooks + const hook1 = Email.hookSend((options) => { + // Test that we get options through + test.equal(options.from, 'foo@example.com'); + console.log('EXECUTE'); + return true; + }); + const hook2 = Email.hookSend(() => { + console.log('STOP'); + return false; + }); + const hook3 = Email.hookSend(() => { + console.log('FAIL'); + }); + smokeEmailTest((stream) => { + Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + stream, + }).then(() => { + test.equal(stream.getContentsAsString('utf8'), false); + hook1.stop(); + hook2.stop(); + hook3.stop(); + onComplete(); + }); + }); + } +); + +// Another tests + +Tinytest.add('[Sync] email - URL string for known hosts', function (test) { + const oneTransport = EmailTest.knowHostsTransport({ + service: '1und1', + user: 'test', + password: 'pwd', + }); + test.equal(oneTransport.transporter.auth.type, 'LOGIN'); + test.equal(oneTransport.transporter.auth.user, 'test'); + + const aolUrlTransport = EmailTest.knowHostsTransport( + null, + 'AOL://test:pwd@aol.com' + ); + test.equal(aolUrlTransport.transporter.auth.user, 'test'); + test.equal(aolUrlTransport.transporter.auth.type, 'LOGIN'); + + const outlookTransport = EmailTest.knowHostsTransport( + null, + 'Outlook365://firstname.lastname%40hotmail.com:password@hotmail.com' + ); + const outlookTransport2 = EmailTest.knowHostsTransport( + undefined, + 'Outlook365://firstname.lastname@hotmail.com:password@hotmail.com' + ); + test.equal( + outlookTransport.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal( + outlookTransport.options.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport.transporter.options.service, 'outlook365'); + test.equal( + outlookTransport2.transporter.auth.user, + 'firstname.lastname%40hotmail.com' + ); + test.equal(outlookTransport2.transporter.options.service, 'outlook365'); + + const hotmailTransport = EmailTest.knowHostsTransport( + undefined, + 'Hotmail://firstname.lastname@hotmail.com:password@hotmail.com' + ); + console.dir(hotmailTransport); + test.equal(hotmailTransport.transporter.options.service, 'hotmail'); + + const falseService = CUSTOM_TRANSPORT_SETTINGS.email; + const errorMsg = + 'Could not recognize e-mail service. See list at https://nodemailer.com/smtp/well-known/ for services that we can configure for you.'; + test.throws(() => EmailTest.knowHostsTransport(falseService), errorMsg); + test.throws( + () => EmailTest.knowHostsTransport(null, 'smtp://bbb:bb@bb.com'), + errorMsg + ); +}); + +Tinytest.addAsync( + '[Async] email - with custom transport exception', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = (options) => { + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + throw new Meteor.Error('Expected error'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }).catch((err) => { + test.equal(err.error, 'Expected error'); + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Async] email - with custom transport long time running', + async function (test) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + }; + await Email.sendAsync({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + } +); + +Tinytest.addAsync( + '[Sync] email - with custom transport long time running', + function (test, onComplete) { + Meteor.settings.packages = CUSTOM_TRANSPORT_SETTINGS; + Email.customTransport = async (options) => { + await sleep(3000); + test.equal(options.from, 'foo@example.com'); + test.equal(options.packageSettings?.service, '1on1'); + Meteor.settings.packages = undefined; + Email.customTransport = undefined; + onComplete(); + }; + Email.send({ + from: 'foo@example.com', + to: 'bar@example.com', + }); + } +); diff --git a/packages/email/email_tests_data.js b/packages/email/email_tests_data.js new file mode 100644 index 0000000000..095c1fb9d2 --- /dev/null +++ b/packages/email/email_tests_data.js @@ -0,0 +1,254 @@ +import { canonicalize, devWarningBanner } from './email_test_helpers'; + +export const TEST_CASES = [ + { + title: 'email - fully customizable', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + cc: ['friends@example.com', 'enemies@example.com'], + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + Date: 'dummy', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + // XXX brittle if mailcomposer changes header order, etc + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'X-Meteor-Test: a custom header\r\n' + + 'Date: dummy\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Cc: friends@example.com, enemies@example.com\r\n' + + 'Subject: This is the subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is the body\n' + + 'of the message\n' + + 'From us.\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - undefined headers sends properly', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^====== BEGIN MAIL #0 ======$[\s\S]+^To: bar@example.com$/m + ); + }, + }, + }, + { + title: 'email - multiple e-mails same stream', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + }, + 1: { + from: 'qux@example.com', + to: 'baz@example.com', + subject: 'This is important', + text: 'This is another message\nFrom Qux.', + }, + }, + + testCalls: { + 0: (test, stream) => { + const contents = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents, /^====== BEGIN MAIL #0 ======$/m); + test.matches(contents, /^From: foo@example.com$/m); + test.matches(contents, /^To: bar@example.com$/m); + }, + 1: (test, stream) => { + const contents2 = canonicalize(stream.getContentsAsString('utf8')); + test.matches(contents2, /^====== BEGIN MAIL #1 ======$/m); + test.matches(contents2, /^From: qux@example.com$/m); + test.matches(contents2, /^To: baz@example.com$/m); + }, + }, + }, + { + title: 'email - using mail composer', + options: { + 0: { + mailComposer: new EmailInternals.NpmModules.mailcomposer.module({ + from: 'a@b.com', + text: 'body', + }), + }, + }, + + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: a@b.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'body\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - date auto generated', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: 'This is the subject', + text: 'This is the body\nof the message\nFrom us.', + headers: { + 'X-Meteor-Test': 'a custom header', + }, + }, + }, + testCalls: { + 0: (test, stream) => { + test.matches( + canonicalize(stream.getContentsAsString('utf8')), + /^Date: .+$/m + ); + }, + }, + }, + { + title: 'email - long lines', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: + 'This is a very very very very very very very very very very very very long subject', + text: 'This is a very very very very very very very very very very very very long text', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: This is a very very very very very very very very ' + + 'very very very\r\n very long subject\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'This is a very very very very very very very very very very ' + + 'very very long =\r\ntext\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - unicode', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + subject: '\u263a', + text: 'I \u2665 Meteor', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Subject: =?UTF-8?B?4pi6?=\r\n' + + 'Message-ID: <...>\r\n' + + 'Content-Transfer-Encoding: quoted-printable\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + 'I =E2=99=A5 Meteor\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, + { + title: 'email - text and html', + options: { + 0: { + from: 'foo@example.com', + to: 'bar@example.com', + text: '*Cool*, man', + html: 'Cool, man', + }, + }, + testCalls: { + 0: (test, stream) => { + test.equal( + canonicalize(stream.getContentsAsString('utf8')), + '====== BEGIN MAIL #0 ======\n' + + devWarningBanner + + 'Content-Type: multipart/alternative;\r\n' + + ' boundary="--...-Part_1"\r\n' + + 'From: foo@example.com\r\n' + + 'To: bar@example.com\r\n' + + 'Message-ID: <...>\r\n' + + 'Date: ...\r\n' + + 'MIME-Version: 1.0\r\n' + + '\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/plain; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + '*Cool*, man\r\n' + + '----...-Part_1\r\n' + + 'Content-Type: text/html; charset=utf-8\r\n' + + 'Content-Transfer-Encoding: 7bit\r\n' + + '\r\n' + + 'Cool, man\r\n' + + '----...-Part_1--\r\n' + + '====== END MAIL #0 ======\n' + ); + }, + }, + }, +]; + diff --git a/packages/email/package.js b/packages/email/package.js index 326bad392a..cc02138f6d 100644 --- a/packages/email/package.js +++ b/packages/email/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Send email messages', - version: '2.2.2', + version: '2.2.3', }); Npm.depends({ diff --git a/packages/facebook-oauth/facebook_server.js b/packages/facebook-oauth/facebook_server.js index c2964cf842..d9c824f27f 100644 --- a/packages/facebook-oauth/facebook_server.js +++ b/packages/facebook-oauth/facebook_server.js @@ -4,13 +4,13 @@ import { Accounts } from 'meteor/accounts-base'; const API_VERSION = Meteor.settings?.public?.packages?.['facebook-oauth']?.apiVersion || '13.0'; -Facebook.handleAuthFromAccessToken = (accessToken, expiresAt) => { +Facebook.handleAuthFromAccessToken = async (accessToken, expiresAt) => { // include basic fields from facebook // https://developers.facebook.com/docs/facebook-login/permissions/ const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'middle_name', 'name_format', 'picture', 'short_name']; - const identity = getIdentity(accessToken, whitelisted); + const identity = await getIdentity(accessToken, whitelisted); const fields = {}; whitelisted.forEach(field => fields[field] = identity[field]); @@ -34,8 +34,8 @@ Accounts.registerLoginHandler(request => { return Accounts.updateOrCreateUserFromExternalService('facebook', facebookData.serviceData, facebookData.options); }); -OAuth.registerService('facebook', 2, null, query => { - const response = getTokenResponse(query); +OAuth.registerService('facebook', 2, null, async query => { + const response = await getTokenResponse(query); const { accessToken } = response; const { expiresIn } = response; @@ -52,7 +52,7 @@ function getAbsoluteUrlOptions(query) { const redirectUrl = new URL(state.redirectUrl); return { rootUrl: redirectUrl.origin, - } + }; } catch (e) { console.error( `Failed to complete OAuth handshake with Facebook because it was not able to obtain the redirect url from the state and you are using overrideRootUrlFromStateRedirectUrl.`, e @@ -61,73 +61,86 @@ function getAbsoluteUrlOptions(query) { } } -// returns an object containing: -// - accessToken -// - expiresIn: lifetime of token in seconds -const getTokenResponse = query => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +/** + * @typedef {Object} UserAccessToken + * @property {string} accessToken - User access Token + * @property {number} expiresIn - lifetime of token in seconds + */ +/** + * @async + * @function getTokenResponse + * @param {Object} query - An object with the code. + * @returns {Promise} - Promise with an Object containing the accessToken and expiresIn (lifetime of token in seconds) + */ +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - let responseContent; - try { + const absoluteUrlOptions = getAbsoluteUrlOptions(query); + const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - const absoluteUrlOptions = getAbsoluteUrlOptions(query); - const redirectUri = OAuth._redirectUri('facebook', config, undefined, absoluteUrlOptions); - // Request an access token - responseContent = HTTP.get( - `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, { - params: { - client_id: config.appId, - redirect_uri: redirectUri, - client_secret: OAuth.openSecret(config.secret), - code: query.code - } - }).data; - } catch (err) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Facebook. ${err.message}`), - { response: err.response }, - ); - } - - const fbAccessToken = responseContent.access_token; - const fbExpires = responseContent.expires_in; - - if (!fbAccessToken) { - throw new Error("Failed to complete OAuth handshake with facebook " + - `-- can't find access token in HTTP response. ${responseContent}`); - } - return { - accessToken: fbAccessToken, - expiresIn: fbExpires - }; + return OAuth._fetch( + `https://graph.facebook.com/v${API_VERSION}/oauth/access_token`, + 'GET', + { + queryParams: { + client_id: config.appId, + redirect_uri: redirectUri, + client_secret: OAuth.openSecret(config.secret), + code: query.code, + }, + } + ) + .then((res) => res.json()) + .then(data => { + const fbAccessToken = data.access_token; + const fbExpires = data.expires_in; + if (!fbAccessToken) { + throw new Error("Failed to complete OAuth handshake with facebook " + + `-- can't find access token in HTTP response. ${data}`); + } + return { + accessToken: fbAccessToken, + expiresIn: fbExpires + }; + }) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Facebook. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = (accessToken, fields) => { - const config = ServiceConfiguration.configurations.findOne({service: 'facebook'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getIdentity = async (accessToken, fields) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'facebook', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); // Generate app secret proof that is a sha256 hash of the app access token, with the app secret as the key // https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof const hmac = crypto.createHmac('sha256', OAuth.openSecret(config.secret)); hmac.update(accessToken); - try { - return HTTP.get(`https://graph.facebook.com/v${API_VERSION}/me`, { - params: { - access_token: accessToken, - appsecret_proof: hmac.digest('hex'), - fields: fields.join(",") - } - }).data; - } catch (err) { - throw Object.assign( - new Error(`Failed to fetch identity from Facebook. ${err.message}`), - { response: err.response }, - ); - } + return OAuth._fetch(`https://graph.facebook.com/v${API_VERSION}/me`, 'GET', { + queryParams: { + access_token: accessToken, + appsecret_proof: hmac.digest('hex'), + fields: fields.join(','), + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error(`Failed to fetch identity from Facebook. ${err.message}`), + { response: err.response } + ); + }); }; Facebook.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/packages/facebook-oauth/package.js b/packages/facebook-oauth/package.js index 5df363643a..98b393d2a9 100644 --- a/packages/facebook-oauth/package.js +++ b/packages/facebook-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: "Facebook OAuth flow", - version: '1.11.1' + version: '1.11.2' }); Package.onUse(api => { api.use('ecmascript', ['client', 'server']); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/github-oauth/github_server.js b/packages/github-oauth/github_server.js index b71995d1c0..7b4f36f5f6 100644 --- a/packages/github-oauth/github_server.js +++ b/packages/github-oauth/github_server.js @@ -1,12 +1,9 @@ Github = {}; -OAuth.registerService('github', 2, null, (query) => { - const accessTokenCall = Meteor.wrapAsync(getAccessToken); - const accessToken = accessTokenCall(query); - const identityCall = Meteor.wrapAsync(getIdentity); - const identity = identityCall(accessToken); - const emailsCall = Meteor.wrapAsync(getEmails); - const emails = emailsCall(accessToken); +OAuth.registerService('github', 2, null, async (query) => { + const accessToken = await getAccessToken(query); + const identity = await getIdentity(accessToken); + const emails = await getEmails(accessToken); const primaryEmail = emails.find((email) => email.primary); return { @@ -31,7 +28,7 @@ OAuth.registerService('github', 2, null, (query) => { let userAgent = 'Meteor'; if (Meteor.release) userAgent += `/${Meteor.release}`; -const getAccessToken = async (query, callback) => { +const getAccessToken = async (query) => { const config = ServiceConfiguration.configurations.findOne({ service: 'github' }); @@ -68,18 +65,16 @@ const getAccessToken = async (query, callback) => { ); } if (response.error) { - callback(response.error); // if the http response was a json object with an error attribute throw new Error( `Failed to complete OAuth handshake with GitHub. ${response.error}` ); } else { - callback(null, response.access_token); return response.access_token; } }; -const getIdentity = async (accessToken, callback) => { +const getIdentity = async (accessToken) => { try { const request = await fetch('https://api.github.com/user', { method: 'GET', @@ -89,11 +84,8 @@ const getIdentity = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message); throw Object.assign( new Error(`Failed to fetch identity from Github. ${err.message}`), { response: err.response } @@ -101,7 +93,7 @@ const getIdentity = async (accessToken, callback) => { } }; -const getEmails = async (accessToken, callback) => { +const getEmails = async (accessToken) => { try { const request = await fetch('https://api.github.com/user/emails', { method: 'GET', @@ -111,11 +103,8 @@ const getEmails = async (accessToken, callback) => { Authorization: `token ${accessToken}` } // http://developer.github.com/v3/#user-agent-required }); - const response = await request.json(); - callback(null, response); - return response; + return await request.json(); } catch (err) { - callback(err.message, []); return []; } }; diff --git a/packages/github-oauth/package.js b/packages/github-oauth/package.js index de8e9415cb..2316e275a2 100644 --- a/packages/github-oauth/package.js +++ b/packages/github-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'GitHub OAuth flow', - version: '1.4.0' + version: '1.4.1' }); Package.onUse(api => { diff --git a/packages/google-oauth/google_server.js b/packages/google-oauth/google_server.js index d13c285914..a25637be75 100644 --- a/packages/google-oauth/google_server.js +++ b/packages/google-oauth/google_server.js @@ -5,40 +5,46 @@ import { fetch } from 'meteor/fetch'; const hasOwn = Object.prototype.hasOwnProperty; // https://developers.google.com/accounts/docs/OAuth2Login#userinfocall -Google.whitelistedFields = ['id', 'email', 'verified_email', 'name', 'given_name', - 'family_name', 'picture', 'locale', 'timezone', 'gender']; +Google.whitelistedFields = [ + 'id', + 'email', + 'verified_email', + 'name', + 'given_name', + 'family_name', + 'picture', + 'locale', + 'timezone', + 'gender', +]; -const getServiceDataFromTokens = tokens => { +const getServiceDataFromTokens = async (tokens, callback) => { const { accessToken, idToken } = tokens; - const scopesCall = Meteor.wrapAsync(getScopes); - let scopes; - try { - scopes = scopesCall(accessToken); - } catch (err) { - throw Object.assign( + const scopes = await getScopes(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch tokeninfo from Google. ${err.message}`), { response: err.response } ); - } - const identityCall = Meteor.wrapAsync(getIdentity); - let identity; - try { - identity = identityCall(accessToken); - } catch (err) { - throw Object.assign( + callback && callback(error); + throw error; + }); + + let identity = await getIdentity(accessToken).catch((err) => { + const error = Object.assign( new Error(`Failed to fetch identity from Google. ${err.message}`), { response: err.response } ); - } + callback && callback(error); + throw error; + }); const serviceData = { accessToken, idToken, - scope: scopes + scope: scopes, }; - if (hasOwn.call(tokens, "expiresIn")) { - serviceData.expiresAt = - Date.now() + 1000 * parseInt(tokens.expiresIn, 10); + if (hasOwn.call(tokens, 'expiresIn')) { + serviceData.expiresAt = Date.now() + 1000 * parseInt(tokens.expiresIn, 10); } const fields = Object.create(null); @@ -56,22 +62,25 @@ const getServiceDataFromTokens = tokens => { if (tokens.refreshToken) { serviceData.refreshToken = tokens.refreshToken; } - - return { + const returnValue = { serviceData, options: { profile: { - name: identity.name - } - } + name: identity.name, + }, + }, }; + + callback && callback(undefined, returnValue); + + return returnValue; }; -Accounts.registerLoginHandler(request => { +Accounts.registerLoginHandler(async (request) => { if (request.googleSignIn !== true) { return; } - + console.log({ request }); const tokens = { accessToken: request.accessToken, refreshToken: request.refreshToken, @@ -79,29 +88,38 @@ Accounts.registerLoginHandler(request => { }; if (request.serverAuthCode) { - Object.assign(tokens, getTokens({ - code: request.serverAuthCode - })); + Object.assign( + tokens, + await getTokens({ + code: request.serverAuthCode, + }) + ); } let result; try { - result = getServiceDataFromTokens(tokens); + result = await getServiceDataFromTokens(tokens); } catch (err) { throw Object.assign( - new Error(`Failed to complete OAuth handshake with Google. ${err.message}`), + new Error( + `Failed to complete OAuth handshake with Google. ${err.message}` + ), { response: err.response } ); } - - return Accounts.updateOrCreateUserFromExternalService("google", { - id: request.userId, - idToken: request.idToken, - accessToken: request.accessToken, - email: request.email, - picture: request.imageUrl, - ...result.serviceData, - }, result.options); + console.log({ result }); + return Accounts.updateOrCreateUserFromExternalService( + 'google', + { + id: request.userId, + idToken: request.idToken, + accessToken: request.accessToken, + email: request.email, + picture: request.imageUrl, + ...result.serviceData, + }, + result.options + ); }); // returns an object containing: @@ -109,45 +127,48 @@ Accounts.registerLoginHandler(request => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request const getTokens = async (query, callback) => { - const config = ServiceConfiguration.configurations.findOne({service: 'google'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); + const config = ServiceConfiguration.configurations.findOne({ + service: 'google', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); const content = new URLSearchParams({ code: query.code, client_id: config.clientId, client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('google', config), - grant_type: 'authorization_code' + grant_type: 'authorization_code', + }); + const request = await fetch('https://accounts.google.com/o/oauth2/token', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: content, }); - const request = await fetch( - "https://accounts.google.com/o/oauth2/token", { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: content, - }); const response = await request.json(); - if (response.error) { // if the http response was a json object with an error attribute - callback(response.error); - throw new Meteor.Error(`Failed to complete OAuth handshake with Google. ${response.error}`); + if (response.error) { + // if the http response was a json object with an error attribute + callback && callback(response.error); + throw new Meteor.Error( + `Failed to complete OAuth handshake with Google. ${response.error}` + ); } else { const data = { accessToken: response.access_token, refreshToken: response.refresh_token, expiresIn: response.expires_in, - idToken: response.id_token + idToken: response.id_token, }; - callback(undefined, data); + callback && callback(undefined, data); return data; } }; -const getTokensCall = Meteor.wrapAsync(getTokens); -const getServiceData = query => getServiceDataFromTokens(getTokensCall(query)); +const getServiceData = async (query) => + getServiceDataFromTokens(await getTokens(query)); OAuth.registerService('google', 2, null, getServiceData); @@ -159,14 +180,15 @@ const getIdentity = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/userinfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response); + callback && callback(undefined, response); return response; }; @@ -178,14 +200,15 @@ const getScopes = async (accessToken, callback) => { `https://www.googleapis.com/oauth2/v1/tokeninfo?${content.toString()}`, { method: 'GET', - headers: { Accept: 'application/json' } - }); + headers: { Accept: 'application/json' }, + } + ); response = await request.json(); } catch (e) { - callback(e); + callback && callback(e); throw new Meteor.Error(e.reason); } - callback(undefined, response.scope.split(' ')); + callback && callback(undefined, response.scope.split(' ')); return response.scope.split(' '); }; diff --git a/packages/google-oauth/package.js b/packages/google-oauth/package.js index 102f60b0ac..141c79e6c6 100644 --- a/packages/google-oauth/package.js +++ b/packages/google-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Google OAuth flow", - version: "1.4.2", + version: "1.4.3", }); Cordova.depends({ diff --git a/packages/meetup-oauth/meetup_server.js b/packages/meetup-oauth/meetup_server.js index cffa8da9e5..bfc465c7b3 100644 --- a/packages/meetup-oauth/meetup_server.js +++ b/packages/meetup-oauth/meetup_server.js @@ -1,10 +1,10 @@ Meetup = {}; -OAuth.registerService('meetup', 2, null, query => { - const response = getAccessToken(query); +OAuth.registerService('meetup', 2, null, async query => { + const response = await getAccessToken(query); const accessToken = response.access_token; const expiresAt = (+new Date) + (1000 * response.expires_in); - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const { id, name, @@ -33,50 +33,63 @@ OAuth.registerService('meetup', 2, null, query => { }; }); -const getAccessToken = query => { +const getAccessToken = async query => { const config = ServiceConfiguration.configurations.findOne({service: 'meetup'}); if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - grant_type: 'authorization_code', - redirect_uri: OAuth._redirectUri('meetup', config), - state: query.state - }}); - } catch (err) { - throw Object.assign( - new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), - { response: err.response } - ); - } + const body = OAuth._addValuesToQueryParams({ + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + grant_type: 'authorization_code', + redirect_uri: OAuth._redirectUri('meetup', config), + state: query.state + }); - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Meetup. ${response.data.error}`); - } else { - return response.data; - } + return OAuth._fetch('https://secure.meetup.com/oauth2/access', 'POST', { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + }) + .then(data => data.json()) + .then(data => { + if (data.error) { + throw new Error(`Failed to complete OAuth handshake with Meetup. ${data.error.message}`); + } + return data; + }) + .catch(err => { + throw Object.assign( + new Error(`Failed to complete OAuth handshake with Meetup. ${err.message}`), + { response: err.response }, + ); + }); }; -const getIdentity = accessToken => { - try { - const response = HTTP.get( - "https://api.meetup.com/2/members", - {params: {member_id: 'self', access_token: accessToken}}); - return response.data.results && response.data.results[0]; - } catch (err) { +const getIdentity = async accessToken => { + const body = OAuth._addValuesToQueryParams({ + member_id: 'self', + access_token: accessToken + }); + + return OAuth._fetch('https://api.meetup.com/2/members', 'POST', { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + }).then(data => data.json()) + .then(({results = []}) => results.length && results[0]) + .catch(err => { throw Object.assign( new Error(`Failed to fetch identity from Meetup. ${err.message}`), { response: err.response } ); - } + }); }; - Meetup.retrieveCredential = (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meetup-oauth/package.js b/packages/meetup-oauth/package.js index 83df9f74a3..e5049f19cf 100644 --- a/packages/meetup-oauth/package.js +++ b/packages/meetup-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: 'Meetup OAuth flow', - version: '1.1.1' + version: '1.1.2' }); Package.onUse(api => { api.use('ecmascript'); api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', 'server'); api.use('random', 'client'); api.use('service-configuration', ['client', 'server']); diff --git a/packages/meteor-developer-oauth/meteor_developer_server.js b/packages/meteor-developer-oauth/meteor_developer_server.js index c563ba47e8..57dd193ae1 100644 --- a/packages/meteor-developer-oauth/meteor_developer_server.js +++ b/packages/meteor-developer-oauth/meteor_developer_server.js @@ -1,7 +1,7 @@ -OAuth.registerService("meteor-developer", 2, null, query => { - const response = getTokens(query); +OAuth.registerService("meteor-developer", 2, null, async query => { + const response = await getTokens(query); const { accessToken } = response; - const identity = getIdentity(accessToken); + const identity = await getIdentity(accessToken); const serviceData = { accessToken: OAuth.sealSecret(accessToken), @@ -28,69 +28,77 @@ OAuth.registerService("meteor-developer", 2, null, query => { // - expiresIn: lifetime of token in seconds // - refreshToken, if this is the first authorization request and we got a // refresh token from the server -const getTokens = query => { +const getTokens = async (query) => { const config = ServiceConfiguration.configurations.findOne({ - service: 'meteor-developer' + service: 'meteor-developer', }); - if (!config) + if (!config) { throw new ServiceConfiguration.ConfigError(); + } - let response; - try { - response = HTTP.post( - MeteorDeveloperAccounts._server + "/oauth2/token", { - params: { - grant_type: "authorization_code", - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('meteor-developer', config) - } + const body = OAuth._addValuesToQueryParams({ + grant_type: 'authorization_code', + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('meteor-developer', config), + }).toString(); + + return OAuth._fetch( + MeteorDeveloperAccounts._server + '/oauth2/token', + 'POST', + { + headers: { + Accept: 'application/json', + 'Content-type': 'application/x-www-form-urlencoded', + }, + body, + } + ) + .then((data) => data.json()) + .then((data) => { + if (data.error) { + throw new Error( + 'Failed to complete OAuth handshake with Meteor developer accounts. ' + + (data ? data.error : 'No response data') + ); } - ); - } catch (err) { - throw Object.assign( - new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " - + err.message - ), - {response: err.response} - ); - } - - if (! response.data || response.data.error) { - // if the http response was a json object with an error attribute - throw new Error( - "Failed to complete OAuth handshake with Meteor developer accounts. " + - (response.data ? response.data.error : - "No response data") - ); - } else { - return { - accessToken: response.data.access_token, - refreshToken: response.data.refresh_token, - expiresIn: response.data.expires_in - }; - } + return { + accessToken: data.access_token, + refreshToken: data.refresh_token, + expiresIn: data.expires_in, + }; + }) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Meteor developer accounts. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = accessToken => { - try { - return HTTP.get( - `${MeteorDeveloperAccounts._server}/api/v1/identity`, - { - headers: { Authorization: `Bearer ${accessToken}`} - } - ).data; - } catch (err) { - throw Object.assign( - new Error("Failed to fetch identity from Meteor developer accounts. " + - err.message), - {response: err.response} - ); - } +const getIdentity = async (accessToken) => { + return OAuth._fetch( + `${MeteorDeveloperAccounts._server}/api/v1/identity`, + 'GET', + { + headers: { Authorization: `Bearer ${accessToken}` }, + } + ) + .then((data) => data.json()) + .catch((err) => { + throw Object.assign( + new Error( + 'Failed to fetch identity from Meteor developer accounts. ' + + err.message + ), + { response: err.response } + ); + }); }; -MeteorDeveloperAccounts.retrieveCredential = - (credentialToken, credentialSecret) => +MeteorDeveloperAccounts.retrieveCredential = + (credentialToken, credentialSecret) => OAuth.retrieveCredential(credentialToken, credentialSecret); diff --git a/packages/meteor-developer-oauth/package.js b/packages/meteor-developer-oauth/package.js index b1463542d5..36e4dbb76c 100644 --- a/packages/meteor-developer-oauth/package.js +++ b/packages/meteor-developer-oauth/package.js @@ -1,12 +1,11 @@ Package.describe({ summary: 'Meteor developer accounts OAuth flow', - version: '1.3.1' + version: '1.3.2' }); Package.onUse(api => { api.use('oauth2', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use('http@1.4.4 || 2.0.0', ['server']); api.use(['ecmascript', 'service-configuration'], ['client', 'server']); api.use('random', 'client'); diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index eddeaa008c..bafb59a62e 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'The Meteor command-line tool', - version: '2.8.2', + version: '2.9.0', }); Package.includeTool(); diff --git a/packages/meteor/asl-helpers.js b/packages/meteor/asl-helpers.js new file mode 100644 index 0000000000..27d9b227cb --- /dev/null +++ b/packages/meteor/asl-helpers.js @@ -0,0 +1,22 @@ +const getAslStore = () => (Meteor.isServer && global?.asyncLocalStorage?.getStore()) || {}; +const getValueFromAslStore = key => getAslStore()[key]; +const updateAslStore = (key, value) => getAslStore()[key] = value; + +Meteor._isFibersEnabled = !process.env.DISABLE_FIBERS && Meteor.isServer; +Meteor._getAslStore = getAslStore; +Meteor._getValueFromAslStore = getValueFromAslStore; +Meteor._updateAslStore = updateAslStore; + +Meteor._runAsync = (fn, ctx) => { + if (Meteor._isFibersEnabled) { + const Fiber = Npm.require('fibers'); + + return Fiber(() => { + fn.call(ctx); + }).run(); + } + + global.asyncLocalStorage.run(Meteor._getAslStore(), () => { + fn.call(ctx); + }); +}; diff --git a/packages/meteor/helpers.js b/packages/meteor/helpers.js index ad28064003..242921945c 100644 --- a/packages/meteor/helpers.js +++ b/packages/meteor/helpers.js @@ -71,6 +71,38 @@ Meteor._delete = function (obj /*, arguments */) { } }; + +/** + * Takes a function that has a callback argument as the last one and promissify it. + * One option would be to use node utils.promisify, but it won't work on the browser. + * @param fn + * @param context + * @param errorFirst - If the callback follows the errorFirst style + * @returns {function(...[*]): Promise} + */ +Meteor.promisify = function (fn, context, errorFirst = true) { + return function (...fnArgs) { + return new Promise((resolve, reject) => { + const callback = Meteor.bindEnvironment((error, result) => { + let _error = error, _result = result; + if (!errorFirst) { + _error = result; + _result = error; + } + + if (_error) { + return reject(_error); + } + + resolve(_result); + }); + + const filteredArgs = [...fnArgs, callback].filter(i => i !== undefined); + return fn.apply(context || this, filteredArgs); + }); + }; +}; + // wrapAsync can wrap any function that takes some number of arguments that // can't be undefined, followed by some optional arguments, where the callback // is the last optional argument. @@ -171,5 +203,3 @@ function logErr(err) { ); } } - -Meteor._isFibersEnabled = global._isFibersEnabled; diff --git a/packages/meteor/meteor.d.ts b/packages/meteor/meteor.d.ts index 0a482c0aa9..eb08d994bd 100644 --- a/packages/meteor/meteor.d.ts +++ b/packages/meteor/meteor.d.ts @@ -147,12 +147,19 @@ export namespace Meteor { }): void; /** - * Invokes a method passing any number of arguments. + * Invokes a method with a sync stub, passing any number of arguments. * @param name Name of method to invoke * @param args Optional method arguments */ function call(name: string, ...args: any[]): any; + /** + * Invokes a method with an async stub, passing any number of arguments. + * @param name Name of method to invoke + * @param args Optional method arguments + */ + function callAsync(name: string, ...args: any[]): Promise; + function apply< Result extends | EJSONable @@ -434,7 +441,14 @@ export namespace Meteor { */ function publish( name: string | null, - func: (this: Subscription, ...args: any[]) => void, + func: ( + this: Subscription, + ...args: any[] + ) => + | void + | Mongo.Cursor + | Mongo.Cursor[] + | Promise | Mongo.Cursor[]>, options?: { is_auto: boolean } ): void; diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 930478dc07..7007d77957 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.10.2' + version: '1.10.3' }); Package.registerBuildPlugin({ @@ -33,6 +33,7 @@ Package.onUse(function (api) { api.addFiles('setimmediate.js', ['client', 'server']); api.addFiles('timers.js', ['client', 'server']); api.addFiles('errors.js', ['client', 'server']); + api.addFiles('asl-helpers.js', 'server'); api.addFiles('fiber_helpers.js', 'server'); api.addFiles('fiber_stubs_client.js', 'client'); api.addFiles('startup_client.js', ['client']); @@ -54,8 +55,6 @@ Package.onUse(function (api) { // People expect process.exit() to not swallow console output. // On Windows, it sometimes does, so we fix it for all apps and packages api.addFiles('flush-buffers-on-exit-in-windows.js', 'server'); - - api.addAssets('meteor.d.ts', 'server'); }); Package.onTest(function (api) { diff --git a/packages/minifier-css/minifier-async-tests.js b/packages/minifier-css/minifier-async-tests.js new file mode 100644 index 0000000000..755595ba6e --- /dev/null +++ b/packages/minifier-css/minifier-async-tests.js @@ -0,0 +1,51 @@ +import { CssTools } from './minifier'; +const TEST_CASES = [ + ['a \t\n{ color: red } \n', 'a{color:red}', 'whitespace check'], + [ + 'a \t\n{ color: red; margin: 1; } \n', + 'a{color:red;margin:1}', + 'only last one loses semicolon', + ], + [ + 'a \t\n{ color: red;;; margin: 1;;; } \n', + 'a{color:red;margin:1}', + 'more semicolons than needed', + ], + ['a , p \t\n{ color: red; } \n', 'a,p{color:red}', 'multiple selectors'], + ['body {}', '', 'removing empty rules'], + [ + '*.my-class { color: #fff; }', + '.my-class{color:#fff}', + 'removing universal selector', + ], + [ + 'p > *.my-class { color: #fff; }', + 'p>.my-class{color:#fff}', + 'removing optional whitespace around ">" in selector', + ], + [ + 'p + *.my-class { color: #fff; }', + 'p+.my-class{color:#fff}', + 'removing optional whitespace around "+" in selector', + ], + [ + 'a {\n\ + font:12px \'Helvetica\',"Arial",\'Nautica\';\n\ + background:url("/some/nice/picture.png");\n}', + 'a{font:12px Helvetica,Arial,Nautica;background:url(/some/nice/picture.png)}', + 'removing quotes in font and url (if possible)', + ], + ['/* no comments */ a { color: red; }', 'a{color:red}', 'remove comments'], +]; + +Tinytest.addAsync( + '[Async] minifier-css - simple CSS minification', + async (test) => { + const promises = TEST_CASES.map(([css, expected, desc]) => + CssTools.minifyCssAsync(css).then((minifiedCss) => { + test.equal(minifiedCss[0], expected, desc); + }) + ); + return Promise.all(promises); + } +); diff --git a/packages/minifier-css/minifier.js b/packages/minifier-css/minifier.js index 174452f1ee..a4c662e9e5 100644 --- a/packages/minifier-css/minifier.js +++ b/packages/minifier-css/minifier.js @@ -1,6 +1,5 @@ import path from 'path'; import url from 'url'; -import Future from 'fibers/future'; import postcss from 'postcss'; import cssnano from 'cssnano'; @@ -65,23 +64,21 @@ const CssTools = { * @return {String[]} Array containing the minified CSS. */ minifyCss(cssText) { - const f = new Future; - postcss([ - cssnano({ safe: true }), - ]).process(cssText, { - from: void 0, - }).then(result => { - f.return(result.css); - }).catch(error => { - f.throw(error); - }); - const minifiedCss = f.wait(); + return Promise.await(CssTools.minifyCssAsync(cssText)); + }, - // Since this function has always returned an array, we'll wrap the - // minified css string in an array before returning, even though we're - // only ever returning one minified css string in that array (maintaining - // backwards compatibility). - return [minifiedCss]; + /** + * Minify the passed in CSS string. + * + * @param {string} cssText CSS string to minify. + * @return {Promise} Array containing the minified CSS. + */ + async minifyCssAsync(cssText) { + return await postcss([cssnano({ safe: true })]) + .process(cssText, { + from: void 0, + }) + .then((result) => [result.css]); }, /** @@ -187,6 +184,7 @@ if (typeof Profile !== 'undefined') { 'parseCss', 'stringifyCss', 'minifyCss', + 'minifyCssAsync', 'mergeCssAsts', 'rewriteCssUrls', ].forEach(funcName => { diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 022ed4c78c..373e5ae579 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'CSS minifier', - version: '1.6.1' + version: '1.6.2' }); Npm.depends({ @@ -19,6 +19,7 @@ Package.onTest(function (api) { api.use('tinytest'); api.addFiles([ 'minifier-tests.js', + 'minifier-async-tests.js', 'urlrewriting-tests.js' ], 'server'); }); diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 72a51cd67b..0c119a8f81 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -39,7 +39,11 @@ export default class Cursor { } /** - * @summary Returns the number of documents that match a query. + * @deprecated in 2.9 + * @summary Returns the number of documents that match a query. This method is + * [deprecated since MongoDB 4.0](https://www.mongodb.com/docs/v4.4/reference/command/count/); + * see `Collection.countDocuments` and + * `Collection.estimatedDocumentCount` for a replacement. * @memberOf Mongo.Cursor * @method count * @instance diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index e3668eeb03..43877fb87e 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -39,6 +39,14 @@ export default class LocalCollection { this.paused = false; } + countDocuments(selector, options) { + return this.find(selector ?? {}, options).countAsync(); + } + + estimatedDocumentCount(options) { + return this.find({}, options).countAsync(); + } + // options may include sort, skip, limit, reactive // sort may be any of these forms: // {a: 1, b: -1} diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 3b8e47fb2f..2353ea1305 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.9.0' + version: '1.9.1' }); Package.onUse(api => { diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index 3dcc12dc96..d5b99edae4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -319,6 +319,33 @@ Object.assign(Mongo.Collection.prototype, { /// /// Main collection API /// + /** + * @summary Gets the number of documents matching the filter. For a fast count of the total documents in a collection see `estimatedDocumentCount`. + * @locus Anywhere + * @method countDocuments + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/CountDocumentsOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ + countDocuments(...args) { + return this._collection.countDocuments(...args); + }, + + /** + * @summary Gets an estimate of the count of documents in a collection using collection metadata. For an exact count of the documents in a collection see `countDocuments`. + * @locus Anywhere + * @method estimatedDocumentCount + * @memberof Mongo.Collection + * @instance + * @param {MongoSelector} [selector] A query describing the documents to count + * @param {Object} [options] All options are listed in [MongoDB documentation](https://mongodb.github.io/node-mongodb-native/4.11/interfaces/EstimatedDocumentCountOptions.html). Please note that not all of them are available on the client. + * @returns {Promise} + */ + estimatedDocumentCount(...args) { + return this._collection.estimatedDocumentCount(...args); + }, _getFindSelector(args) { if (args.length == 0) return {}; diff --git a/packages/mongo/collection_async_tests.js b/packages/mongo/collection_async_tests.js index 5d3a277fa0..d709cee26c 100644 --- a/packages/mongo/collection_async_tests.js +++ b/packages/mongo/collection_async_tests.js @@ -19,3 +19,14 @@ Tinytest.add('async collection - check for methods presence', function (test) { isFunction(cursor.mapAsync); isFunction(cursor[Symbol.asyncIterator]); }); + +['countDocuments', 'estimatedDocumentCount'].forEach(method => { + Tinytest.addAsync(`async collection - ${method}`, async test => { + const collection = new Mongo.Collection(method + test.id); + for (let index = 0; index < 10; ++index) { + test.instanceOf(collection[method](), Promise); + test.equal(await collection[method](), index); + collection.insert({}); + } + }); +}); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 98a7017403..7b7b24ec00 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -826,6 +826,18 @@ MongoConnection.prototype.createIndex = function (collectionName, index, future.wait(); }; +MongoConnection.prototype.countDocuments = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); + const collection = this.rawCollection(collectionName); + return collection.countDocuments(...args); +}; + +MongoConnection.prototype.estimatedDocumentCount = function (collectionName, ...args) { + args = args.map(arg => replaceTypes(arg, replaceMeteorAtomWithMongo)); + const collection = this.rawCollection(collectionName); + return collection.estimatedDocumentCount(...args); +}; + MongoConnection.prototype._ensureIndex = MongoConnection.prototype.createIndex; MongoConnection.prototype._dropIndex = function (collectionName, index) { diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 952a37478f..43c6e64411 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -36,7 +36,7 @@ function join(prefix, key) { return prefix ? `${prefix}.${key}` : key; } -const arrayOperatorKeyRegex = /^(a|u\d+)$/; +const arrayOperatorKeyRegex = /^(a|[su]\d+)$/; function isArrayOperatorKey(field) { return arrayOperatorKeyRegex.test(field); @@ -96,7 +96,9 @@ function convertOplogDiff(oplogEntry, diff, prefix) { } const positionKey = join(join(prefix, key), position.slice(1)); - if (value === null) { + if (position[0] === 's') { + convertOplogDiff(oplogEntry, value, positionKey); + } else if (value === null) { oplogEntry.$unset ??= {}; oplogEntry.$unset[positionKey] = true; } else { diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index f87c8877f3..79bcbada93 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -77,6 +77,71 @@ const cases = [ { $v: 2, diff: { u: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } } }, { $v: 2, $set: { params: { e: { _str: '5f953cde8ceca90030bdb86f' } } } }, ], + [ + { + $v: 2, + diff: { + sitems: { + a: true, + s0: { + u: { id: 'm57DsX8g8L66bM5JX', name: 'Alice' }, + sbio: { u: { en: 'Just Alice' } }, + slanguages: { + a: true, + s0: { + u: { englishName: 'English', key: 'en', localName: 'English' }, + }, + }, + }, + u1: { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { en: 'Fictional character', sv: '' }, + bio: { en: 'Just Bob', sv: '' }, + avatar: null, + languages: [ + { key: 'sv', englishName: 'Swedish', localName: 'Sverige' }, + ], + }, + u2: null + }, + }, + }, + { + $v: 2, + $set: { + 'items.0.id': 'm57DsX8g8L66bM5JX', + 'items.0.name': 'Alice', + 'items.0.bio.en': 'Just Alice', + 'items.0.languages.0.englishName': 'English', + 'items.0.languages.0.key': 'en', + 'items.0.languages.0.localName': 'English', + 'items.1': { + id: 'FJwSQHqwpenCN6RQH', + name: 'Bob', + title: { + en: 'Fictional character', + sv: '', + }, + bio: { + en: 'Just Bob', + sv: '', + }, + avatar: null, + languages: [ + { + key: 'sv', + englishName: 'Swedish', + localName: 'Sverige', + }, + ], + }, + }, + $unset: { + 'items.2': true + } + }, + ] ]; Tinytest.add('oplog - v2/v1 conversion', function (test) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 5eb3cebb85..e744c56705 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.16.2' + version: '1.16.3' }); Npm.depends({ diff --git a/packages/mongo/remote_collection_driver.js b/packages/mongo/remote_collection_driver.js index f237879de0..035af45157 100644 --- a/packages/mongo/remote_collection_driver.js +++ b/packages/mongo/remote_collection_driver.js @@ -4,13 +4,28 @@ MongoInternals.RemoteCollectionDriver = function ( self.mongo = new MongoConnection(mongo_url, options); }; +const REMOTE_COLLECTION_METHODS = [ + '_createCappedCollection', + '_dropIndex', + '_ensureIndex', + 'createIndex', + 'countDocuments', + 'dropCollection', + 'estimatedDocumentCount', + 'find', + 'findOne', + 'insert', + 'rawCollection', + 'remove', + 'update', + 'upsert', +]; + Object.assign(MongoInternals.RemoteCollectionDriver.prototype, { open: function (name) { var self = this; var ret = {}; - ['find', 'findOne', 'insert', 'update', 'upsert', - 'remove', '_ensureIndex', 'createIndex', '_dropIndex', '_createCappedCollection', - 'dropCollection', 'rawCollection'].forEach( + REMOTE_COLLECTION_METHODS.forEach( function (m) { ret[m] = _.bind(self.mongo[m], self.mongo, name); }); diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 11662ebe99..b276e22ce7 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -62,214 +62,224 @@ } }, "@aws-sdk/abort-controller": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.190.0.tgz", - "integrity": "sha512-M6qo2exTzEfHT5RuW7K090OgesUojhb2JyWiV4ulu7ngY4DWBUBMKUqac696sHRUZvGE5CDzSi0606DMboM+kA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz", + "integrity": "sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ==" }, "@aws-sdk/client-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.192.0.tgz", - "integrity": "sha512-nIRmiv5JY8wWGUadhG7yLx8o8aVETj5CAgO8e8UJIwwqfue/Yv9bHi2mvkUphO1pj0TeBatAtvu79neJQtsR5g==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.218.0.tgz", + "integrity": "sha512-IHzM9jpLqdeqj2w7YA7FrmLCQyKaun7eXtu1OJYMFbJT5XHx6B4jlQ1T/N8xivSSzDfjpJxG6/MMmjec4pI+CA==" }, "@aws-sdk/client-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.190.0.tgz", - "integrity": "sha512-joEKRjJEzgvXnEih/x2UDDCPlvXWCO3MAHmqi44yJ36Ph4YsFS299mOjPdVLuzUtpQ+cST1nRO7hXNFrulW2jQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz", + "integrity": "sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA==" + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz", + "integrity": "sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA==" }, "@aws-sdk/client-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.192.0.tgz", - "integrity": "sha512-iv72dmRxbZ1cN5jGn4KIVzzu11eduS2fXHbNgd7JsFd5hLBV5TvJaugQzUdXNmy2gN4HiRJr+qa9WkD5b39lsA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz", + "integrity": "sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug==" }, "@aws-sdk/config-resolver": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.190.0.tgz", - "integrity": "sha512-K+VnDtjTgjpf7yHEdDB0qgGbHToF0pIL0pQMSnmk2yc8BoB3LGG/gg1T0Ki+wRlrFnDCJ6L+8zUdawY2qDsbyw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz", + "integrity": "sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng==" }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.192.0.tgz", - "integrity": "sha512-CWo+KyHCGyYtvjlmDIGtnwBEkdiondergZADiStbFFvie8pPI7IsdTXNVssQQ1VxKIBGGHVebgZGSklHBqthwA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.218.0.tgz", + "integrity": "sha512-ndhlPBvnxUgje23TnVw0fkDgTZHh0GVapKSgeEIxmxAy3IVLN15iMs7dCV7LWvb7z1P0cYx9cwvxa0nTrVxjtg==" }, "@aws-sdk/credential-provider-env": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.190.0.tgz", - "integrity": "sha512-GTY7l3SJhTmRGFpWddbdJOihSqoMN8JMo3CsCtIjk4/h3xirBi02T4GSvbrMyP7FP3Fdl4NAdT+mHJ4q2Bvzxw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz", + "integrity": "sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ==" }, "@aws-sdk/credential-provider-imds": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.190.0.tgz", - "integrity": "sha512-gI5pfBqGYCKdmx8igPvq+jLzyE2kuNn9Q5u73pdM/JZxiq7GeWYpE/MqqCubHxPtPcTFgAwxCxCFoXlUTBh/2g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz", + "integrity": "sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ==" }, "@aws-sdk/credential-provider-ini": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.190.0.tgz", - "integrity": "sha512-Z7NN/evXJk59hBQlfOSWDfHntwmxwryu6uclgv7ECI6SEVtKt1EKIlPuCLUYgQ4lxb9bomyO5lQAl/1WutNT5w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz", + "integrity": "sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg==" }, "@aws-sdk/credential-provider-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.190.0.tgz", - "integrity": "sha512-ctCG5+TsIK2gVgvvFiFjinPjc5nGpSypU3nQKCaihtPh83wDN6gCx4D0p9M8+fUrlPa5y+o/Y7yHo94ATepM8w==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz", + "integrity": "sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ==" }, "@aws-sdk/credential-provider-process": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.190.0.tgz", - "integrity": "sha512-sIJhICR80n5XY1kW/EFHTh5ZzBHb5X+744QCH3StcbKYI44mOZvNKfFdeRL2fQ7yLgV7npte2HJRZzQPWpZUrw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz", + "integrity": "sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA==" }, "@aws-sdk/credential-provider-sso": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.190.0.tgz", - "integrity": "sha512-uarU9vk471MHHT+GJj3KWFSmaaqLNL5n1KcMer2CCAZfjs+mStAi8+IjZuuKXB4vqVs5DxdH8cy5aLaJcBlXwQ==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz", + "integrity": "sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w==" }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.190.0.tgz", - "integrity": "sha512-nlIBeK9hGHKWC874h+ITAfPZ9Eaok+x/ydZQVKsLHiQ9PH3tuQ8AaGqhuCwBSH0hEAHZ/BiKeEx5VyWAE8/x+Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz", + "integrity": "sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g==" }, "@aws-sdk/credential-providers": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.192.0.tgz", - "integrity": "sha512-iBTrEPkfOHlfgQyk7EeUCmZnhUKXsGcc/hhxBbc6Z/Xc7Y8LqRVLbEmHq9lruXraFuvs26xV9oZi1s1UMXneQA==" + "version": "3.218.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.218.0.tgz", + "integrity": "sha512-MWpb5k+Oq56NrHA5fYPIDX8QRYUAw4Jp8ErTELBd83kLhTgqTw025YQ05YbhIzAs84+viMeWKif0z/5kNshphw==" }, "@aws-sdk/fetch-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.190.0.tgz", - "integrity": "sha512-5riRpKydARXAPLesTZm6eP6QKJ4HJGQ3k0Tepi3nvxHVx3UddkRNoX0pLS3rvbajkykWPNC2qdfRGApWlwOYsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz", + "integrity": "sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw==" }, "@aws-sdk/hash-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.190.0.tgz", - "integrity": "sha512-DNwVT3O8zc9Jk/bXiXcN0WsD98r+JJWryw9F1/ZZbuzbf6rx2qhI8ZK+nh5X6WMtYPU84luQMcF702fJt/1bzg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz", + "integrity": "sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ==" }, "@aws-sdk/invalid-dependency": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.190.0.tgz", - "integrity": "sha512-crCh63e8d/Uw9y3dQlVTPja7+IZiXpNXyH6oSuAadTDQwMq6KK87Av1/SDzVf6bAo2KgAOo41MyO2joaCEk0dQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz", + "integrity": "sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg==" }, "@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==" }, "@aws-sdk/middleware-content-length": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.190.0.tgz", - "integrity": "sha512-sSU347SuC6I8kWum1jlJlpAqeV23KP7enG+ToWcEcgFrJhm3AvuqB//NJxDbkKb2DNroRvJjBckBvrwNAjQnBQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz", + "integrity": "sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ==" + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz", + "integrity": "sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw==" }, "@aws-sdk/middleware-host-header": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.190.0.tgz", - "integrity": "sha512-cL7Vo/QSpGx/DDmFxjeV0Qlyi1atvHQDPn3MLBBmi1icu+3GKZkCMAJwzsrV3U4+WoVoDYT9FJ9yMQf2HaIjeQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz", + "integrity": "sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A==" }, "@aws-sdk/middleware-logger": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.190.0.tgz", - "integrity": "sha512-rrfLGYSZCBtiXNrIa8pJ2uwUoUMyj6Q82E8zmduTvqKWviCr6ZKes0lttGIkWhjvhql2m4CbjG5MPBnY7RXL4A==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz", + "integrity": "sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g==" }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.190.0.tgz", - "integrity": "sha512-5tc1AIIZe5jDNdyuJW+7vIFmQOxz3q031ZVrEtUEIF7cz2ySho2lkOWziz+v+UGSLhjHGKMz3V26+aN1FLZNxQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz", + "integrity": "sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA==" }, "@aws-sdk/middleware-retry": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.190.0.tgz", - "integrity": "sha512-h1bPopkncf2ue/erJdhqvgR2AEh0bIvkNsIHhx93DckWKotZd/GAVDq0gpKj7/f/7B+teHH8Fg5GDOwOOGyKcg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz", + "integrity": "sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA==" }, "@aws-sdk/middleware-sdk-sts": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.192.0.tgz", - "integrity": "sha512-xzTV7MyG5ipWYTvekWX1tQc5ExsUvCYsDTBCD3LR5hBrP8assUDPo52zGSe+QMcjgnQv7BcYIzeikTkLEG0dUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz", + "integrity": "sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg==" }, "@aws-sdk/middleware-serde": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.190.0.tgz", - "integrity": "sha512-S132hEOK4jwbtZ1bGAgSuQ0DMFG4TiD4ulAwbQRBYooC7tiWZbRiR0Pkt2hV8d7WhOHgUpg7rvqlA7/HXXBAsA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz", + "integrity": "sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw==" }, "@aws-sdk/middleware-signing": { - "version": "3.192.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.192.0.tgz", - "integrity": "sha512-qTRIU/TL/dvtTrNj+AkZkgYeTIFslib3Y3XnQNNM6RCm4cMxIgs2K/lnhaUmLdbzHrpOQb4cISkY8yiHo+pNsw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz", + "integrity": "sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg==" }, "@aws-sdk/middleware-stack": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.190.0.tgz", - "integrity": "sha512-h1mqiWNJdi1OTSEY8QovpiHgDQEeRG818v8yShpqSYXJKEqdn54MA3Z1D2fg/Wv/8ZJsFrBCiI7waT1JUYOmCg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz", + "integrity": "sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw==" }, "@aws-sdk/middleware-user-agent": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.190.0.tgz", - "integrity": "sha512-y/2cTE1iYHKR0nkb3DvR3G8vt12lcTP95r/iHp8ZO+Uzpc25jM/AyMHWr2ZjqQiHKNlzh8uRw1CmQtgg4sBxXQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz", + "integrity": "sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw==" }, "@aws-sdk/node-config-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.190.0.tgz", - "integrity": "sha512-TJPUchyeK5KeEXWrwb6oW5/OkY3STCSGR1QIlbPcaTGkbo4kXAVyQmmZsY4KtRPuDM6/HlfUQV17bD716K65rQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz", + "integrity": "sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw==" }, "@aws-sdk/node-http-handler": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.190.0.tgz", - "integrity": "sha512-3Klkr73TpZkCzcnSP+gmFF0Baluzk3r7BaWclJHqt2LcFUWfIJzYlnbBQNZ4t3EEq7ZlBJX85rIDHBRlS+rUyA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz", + "integrity": "sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ==" }, "@aws-sdk/property-provider": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.190.0.tgz", - "integrity": "sha512-uzdKjHE2blbuceTC5zeBgZ0+Uo/hf9pH20CHpJeVNtrrtF3GALtu4Y1Gu5QQVIQBz8gjHnqANx0XhfYzorv69Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz", + "integrity": "sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug==" }, "@aws-sdk/protocol-http": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.190.0.tgz", - "integrity": "sha512-s5MVfeONpfZYRzCSbqQ+wJ3GxKED+aSS7+CQoeaYoD6HDTDxaMGNv9aiPxVCzW02sgG7py7f29Q6Vw+5taZXZA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz", + "integrity": "sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ==" }, "@aws-sdk/querystring-builder": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.190.0.tgz", - "integrity": "sha512-w9mTKkCsaLIBC8EA4RAHrqethNGbf60CbpPzN/QM7yCV3ZZJAXkppFfjTVVOMbPaI8GUEOptJtzgqV68CRB7ow==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz", + "integrity": "sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA==" }, "@aws-sdk/querystring-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.190.0.tgz", - "integrity": "sha512-vCKP0s33VtS47LSYzEWRRr2aTbi3qNkUuQyIrc5LMqBfS5hsy79P1HL4Q7lCVqZB5fe61N8fKzOxDxWRCF0sXg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz", + "integrity": "sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q==" }, "@aws-sdk/service-error-classification": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.190.0.tgz", - "integrity": "sha512-g+s6xtaMa5fCMA2zJQC4BiFGMP7FN5/L1V/UwxCnKy8skCwaN0K5A1tFffBjjbYiPI7Gu7LVorWD2A0Y4xl01Q==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz", + "integrity": "sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw==" }, "@aws-sdk/shared-ini-file-loader": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.190.0.tgz", - "integrity": "sha512-CZC/xsGReUEl5w+JgfancrxfkaCbEisyIFy6HALUYrioWQe80WMqLAdUMZSXHWjIaNK9mH0J/qvcSV2MuIoMzQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz", + "integrity": "sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ==" }, "@aws-sdk/signature-v4": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.190.0.tgz", - "integrity": "sha512-L/R/1X2T+/Kg2k/sjoYyDFulVUGrVcRfyEKKVFIUNg0NwUtw5UKa1/gS7geTKcg4q8M2pd/v+OCBrge2X7phUw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz", + "integrity": "sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ==" }, "@aws-sdk/smithy-client": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.190.0.tgz", - "integrity": "sha512-f5EoCwjBLXMyuN491u1NmEutbolL0cJegaJbtgK9OJw2BLuRHiBknjDF4OEVuK/WqK0kz2JLMGi9xwVPl4BKCA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz", + "integrity": "sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w==" + }, + "@aws-sdk/token-providers": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz", + "integrity": "sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA==" }, "@aws-sdk/types": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.190.0.tgz", - "integrity": "sha512-mkeZ+vJZzElP6OdRXvuLKWHSlDQxZP9u8BjQB9N0Rw0pCXTzYS0vzIhN1pL0uddWp5fMrIE68snto9xNR6BQuA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.215.0.tgz", + "integrity": "sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q==" }, "@aws-sdk/url-parser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.190.0.tgz", - "integrity": "sha512-FKFDtxA9pvHmpfWmNVK5BAVRpDgkWMz3u4Sg9UzB+WAFN6UexRypXXUZCFAo8S04FbPKfYOR3O0uVlw7kzmj9g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz", + "integrity": "sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg==" }, - "@aws-sdk/util-base64-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz", - "integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==" - }, - "@aws-sdk/util-base64-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.188.0.tgz", - "integrity": "sha512-r1dccRsRjKq+OhVRUfqFiW3sGgZBjHbMeHLbrAs9jrOjU2PTQ8PSzAXLvX/9lmp7YjmX17Qvlsg0NCr1tbB9OA==" + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==" }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", @@ -277,59 +287,64 @@ "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==" }, "@aws-sdk/util-body-length-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.188.0.tgz", - "integrity": "sha512-XwqP3vxk60MKp4YDdvDeCD6BPOiG2e+/Ou4AofZOy5/toB6NKz2pFNibQIUg2+jc7mPMnGnvOW3MQEgSJ+gu/Q==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==" }, "@aws-sdk/util-buffer-from": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.188.0.tgz", - "integrity": "sha512-NX1WXZ8TH20IZb4jPFT2CnLKSqZWddGxtfiWxD9M47YOtq/SSQeR82fhqqVjJn4P8w2F5E28f+Du4ntg/sGcxA==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==" }, "@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==" }, "@aws-sdk/util-defaults-mode-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.190.0.tgz", - "integrity": "sha512-FKxTU4tIbFk2pdUbBNneStF++j+/pB4NYJ1HRSEAb/g4D2+kxikR/WKIv3p0JTVvAkwcuX/ausILYEPUyDZ4HQ==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz", + "integrity": "sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA==" }, "@aws-sdk/util-defaults-mode-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.190.0.tgz", - "integrity": "sha512-qBiIMjNynqAP7p6urG1+ZattYkFaylhyinofVcLEiDvM9a6zGt6GZsxru2Loq0kRAXXGew9E9BWGt45HcDc20g==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz", + "integrity": "sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg==" + }, + "@aws-sdk/util-endpoints": { + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz", + "integrity": "sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA==" }, "@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==" }, "@aws-sdk/util-locate-window": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.188.0.tgz", - "integrity": "sha512-SxobBVLZkkLSawTCfeQnhVX3Azm9O+C2dngZVe1+BqtF8+retUbVTs7OfYeWBlawVkULKF2e781lTzEHBBjCzw==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==" }, "@aws-sdk/util-middleware": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.190.0.tgz", - "integrity": "sha512-qzTJ/qhFDzHZS+iXdHydQ/0sWAuNIB5feeLm55Io/I8Utv3l3TKYOhbgGwTsXY+jDk7oD+YnAi7hLN5oEBCwpg==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz", + "integrity": "sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q==" }, "@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==" + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==" }, "@aws-sdk/util-user-agent-browser": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.190.0.tgz", - "integrity": "sha512-c074wjsD+/u9vT7DVrBLkwVhn28I+OEHuHaqpTVCvAIjpueZ3oms0e99YJLfpdpEgdLavOroAsNFtAuRrrTZZw==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz", + "integrity": "sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw==" }, "@aws-sdk/util-user-agent-node": { - "version": "3.190.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.190.0.tgz", - "integrity": "sha512-R36BMvvPX8frqFhU4lAsrOJ/2PJEHH/Jz1WZzO3GWmVSEAQQdHmo8tVPE3KOM7mZWe5Hj1dZudFAIxWHHFYKJA==" + "version": "3.215.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz", + "integrity": "sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw==" }, "@aws-sdk/util-utf8-browser": { "version": "3.188.0", @@ -337,14 +352,14 @@ "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==" }, "@aws-sdk/util-utf8-node": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.188.0.tgz", - "integrity": "sha512-hCgP4+C0Lekjpjt2zFJ2R/iHes5sBGljXa5bScOFAEkRUc0Qw0VNgTv7LpEbIOAwGmqyxBoCwBW0YHPW1DfmYQ==" + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", + "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==" }, "@types/node": { - "version": "18.11.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz", - "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==" + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, "@types/webidl-conversions": { "version": "7.0.0", @@ -376,11 +391,6 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, "fast-xml-parser": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", @@ -402,14 +412,14 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.11.0.tgz", - "integrity": "sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.12.1.tgz", + "integrity": "sha512-koT87tecZmxPKtxRQD8hCKfn+ockEL2xBiUvx3isQGI6mFmagWt4f4AyCE9J4sKepnLhMacoCTQQA6SLAI2L6w==" }, "mongodb-connection-string-url": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz", - "integrity": "sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" }, "punycode": { "version": "2.1.1", @@ -447,9 +457,9 @@ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "uuid": { "version": "8.3.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index 63696bf272..45d1a87a27 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '4.11.0', + version: '4.12.1', documentation: null }); Npm.depends({ - mongodb: "4.11.0" + mongodb: "4.12.1" }); Package.onUse(function (api) { diff --git a/packages/oauth/oauth_server.js b/packages/oauth/oauth_server.js index 6d7b0cb578..1b591a455b 100644 --- a/packages/oauth/oauth_server.js +++ b/packages/oauth/oauth_server.js @@ -136,7 +136,7 @@ OAuth._checkRedirectUrlOrigin = redirectUrl => { ); }; -const middleware = (req, res, next) => { +const middleware = async (req, res, next) => { let requestData; // Make sure to catch any exceptions because otherwise we'd crash @@ -168,7 +168,7 @@ const middleware = (req, res, next) => { requestData = req.body; } - handler(service, requestData, res); + await handler(service, requestData, res); } catch (err) { // if we got thrown an error, save it off, it will get passed to // the appropriate login call (if any) and reported there. @@ -473,3 +473,31 @@ OAuth.openSecrets = (serviceData, userId) => { ); return result; }; + +OAuth._addValuesToQueryParams = ( + values = {}, + queryParams = new URLSearchParams() +) => { + Object.entries(values).forEach(([key, value]) => { + queryParams.set(key, `${value}`); + }); + return queryParams; +}; + +OAuth._fetch = async ( + url, + method = 'GET', + { headers = {}, queryParams = {}, body, ...options } = {} +) => { + const urlWithParams = new URL(url); + + OAuth._addValuesToQueryParams(queryParams, urlWithParams.searchParams); + + const requestOptions = { + method: method.toUpperCase(), + headers, + ...(body ? { body } : {}), + ...options, + }; + return fetch(urlWithParams.toString(), requestOptions); +}; diff --git a/packages/oauth/package.js b/packages/oauth/package.js index 8962aeb282..4b56f43d33 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth-based services", - version: "2.1.2" + version: "2.1.3" }); Package.onUse(api => { @@ -11,6 +11,7 @@ Package.onUse(api => { api.use(['reload', 'base64'], 'client'); api.use('oauth-encryption', 'server', {weak: true}); + api.use('fetch', 'server'); api.export('OAuth'); diff --git a/packages/oauth1/oauth1_binding.js b/packages/oauth1/oauth1_binding.js index aab9629605..015553611e 100644 --- a/packages/oauth1/oauth1_binding.js +++ b/packages/oauth1/oauth1_binding.js @@ -19,12 +19,12 @@ export class OAuth1Binding { this._urls = urls; } - prepareRequestToken(callbackUrl) { + async prepareRequestToken(callbackUrl) { const headers = this._buildHeader({ oauth_callback: callbackUrl }); - const response = this._call('POST', this._urls.requestToken, headers); + const response = await this._call({method: 'POST', url: this._urls.requestToken, headers}); const tokens = querystring.parse(response.content); if (! tokens.oauth_callback_confirmed) @@ -35,7 +35,7 @@ export class OAuth1Binding { this.requestTokenSecret = tokens.oauth_token_secret; } - prepareAccessToken(query, requestTokenSecret) { + async prepareAccessToken(query, requestTokenSecret) { // support implementations that use request token secrets. This is // read by this._call. // @@ -50,7 +50,7 @@ export class OAuth1Binding { oauth_verifier: query.oauth_verifier }); - const response = this._call('POST', this._urls.accessToken, headers); + const response = await this._call({ method: 'POST', url: this._urls.accessToken, headers }); const tokens = querystring.parse(response.content); if (! tokens.oauth_token || ! tokens.oauth_token_secret) { @@ -66,7 +66,7 @@ export class OAuth1Binding { this.accessTokenSecret = tokens.oauth_token_secret; } - call(method, url, params, callback) { + async callAsync(method, url, params, callback) { const headers = this._buildHeader({ oauth_token: this.accessToken }); @@ -75,14 +75,29 @@ export class OAuth1Binding { params = {}; } - return this._call(method, url, headers, params, callback); + return this._call({ method, url, headers, params, callback }); + } + + async getAsync(url, params, callback) { + return this.callAsync('GET', url, params, callback); + } + + async postAsync(url, params, callback) { + return this.callAsync('POST', url, params, callback); + } + + call(method, url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. + return Promise.await(this.callAsync(method, url, params, callback)); } get(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('GET', url, params, callback); } post(url, params, callback) { + // Require changes when remove Fibers. Exposed to public api. return this.call('POST', url, params, callback); } @@ -118,7 +133,7 @@ export class OAuth1Binding { return crypto.createHmac('SHA1', signingKey).update(signatureBase).digest('base64'); }; - _call(method, url, headers = {}, params = {}, callback) { + async _call({method, url, headers = {}, params = {}, callback}) { // all URLs to be functions to support parameters/customization if(typeof url === "function") { url = url(this); @@ -141,29 +156,52 @@ export class OAuth1Binding { // Make a authorization string according to oauth1 spec const authString = this._getAuthHeaderString(headers); - // Make signed request - try { - const response = HTTP.call(method, url, { - params, - headers: { - Authorization: authString + return OAuth._fetch(url, method, { + headers: { + Authorization: authString, + ...(method.toUpperCase() === 'POST' ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}) + }, + ...(method.toUpperCase() === 'POST' ? + { body: OAuth._addValuesToQueryParams(params).toString() } + : { queryParams: params }) + }).then((res) => + res.text().then((content) => { + const responseHeaders = Array.from(res.headers.entries()).reduce( + (acc, [key, val]) => { + return { ...acc, [key.toLowerCase()]: val }; + }, + {} + ); + const data = responseHeaders['content-type'].includes('application/json') ? + JSON.parse(content) : undefined; + return { + content: data ? '' : content, + data, + headers: { ...responseHeaders, nonce: headers.oauth_nonce }, + redirected: res.redirected, + ok: res.ok, + statusCode: res.status, + }; + }) + ) + .then((response) => { + if (callback) { + callback(undefined, response); } - }, callback && ((error, response) => { - if (! error) { - response.nonce = headers.oauth_nonce; + return response; + }) + .catch((err) => { + if (callback) { + callback(err); } - callback(error, response); - })); - // We store nonce so that JWTs can be validated - if (response) - response.nonce = headers.oauth_nonce; - return response; - } catch (err) { - throw Object.assign(new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), - {response: err.response}); - } - }; + console.log({ err }); + throw Object.assign( + new Error(`Failed to send OAuth1 request to ${url}. ${err.message}`), + { response: err.response } + ); + }); + } _encodeHeader(header) { return Object.keys(header).reduce((memo, key) => { diff --git a/packages/oauth1/oauth1_server.js b/packages/oauth1/oauth1_server.js index eb54458825..d0c8e3732a 100644 --- a/packages/oauth1/oauth1_server.js +++ b/packages/oauth1/oauth1_server.js @@ -6,7 +6,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel Object.assign( redirectUrlObj.query, - whitelistedQueryParams.reduce((prev, param) => + whitelistedQueryParams.reduce((prev, param) => params.query[param] ? { ...prev, param: params.query[param] } : prev, {} ), @@ -25,7 +25,7 @@ OAuth._queryParamsWithAuthTokenUrl = (authUrl, oauthBinding, params = {}, whitel }; // connect middleware -OAuth._requestHandlers['1'] = (service, query, res) => { +OAuth._requestHandlers['1'] = async (service, query, res) => { const config = ServiceConfiguration.configurations.findOne({service: service.serviceName}); if (! config) { throw new ServiceConfiguration.ConfigError(service.serviceName); @@ -45,7 +45,7 @@ OAuth._requestHandlers['1'] = (service, query, res) => { }); // Get a request token to start auth process - oauthBinding.prepareRequestToken(callbackUrl); + await oauthBinding.prepareRequestToken(callbackUrl); // Keep track of request token so we can verify it on the next step OAuth._storeRequestToken( @@ -91,10 +91,10 @@ OAuth._requestHandlers['1'] = (service, query, res) => { // subsequent call to the `login` method will be immediate. // Get the access token for signing requests - oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); + await oauthBinding.prepareAccessToken(query, requestTokenInfo.requestTokenSecret); // Run service-specific handler. - const oauthResult = service.handleOauthRequest( + const oauthResult = await service.handleOauthRequest( oauthBinding, { query: query }); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth1/oauth1_tests.js b/packages/oauth1/oauth1_tests.js index a9f266af02..d4b283a97a 100644 --- a/packages/oauth1/oauth1_tests.js +++ b/packages/oauth1/oauth1_tests.js @@ -1,7 +1,7 @@ import http from 'http'; import { OAuth1Binding } from './oauth1_binding'; -const testPendingCredential = (test, method) => { +const testPendingCredential = async (test, method) => { const twitterfooId = Random.id(); const twitterfooName = `nickname${Random.id()}`; const twitterfooAccessToken = Random.id(); @@ -17,8 +17,8 @@ const testPendingCredential = (test, method) => { authenticate: "https://example.com/oauth/authenticate" }; - OAuth1Binding.prototype.prepareRequestToken = () => {}; - OAuth1Binding.prototype.prepareAccessToken = function() { + OAuth1Binding.prototype.prepareRequestToken = async () => {}; + OAuth1Binding.prototype.prepareAccessToken = async function() { this.accessToken = twitterfooAccessToken; this.accessTokenSecret = twitterfooAccessTokenSecret; }; @@ -27,7 +27,7 @@ const testPendingCredential = (test, method) => { try { // register a fake login service - OAuth.registerService(serviceName, 1, urls, query => ({ + OAuth.registerService(serviceName, 1, urls, async query => ({ serviceData: { id: twitterfooId, screenName: twitterfooName, @@ -71,7 +71,7 @@ const testPendingCredential = (test, method) => { respData += args[0]; return end.apply(this, arguments); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -94,17 +94,17 @@ const testPendingCredential = (test, method) => { } }; -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.addAsync("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth1/package.js b/packages/oauth1/package.js index 550fdc2448..7435caf024 100644 --- a/packages/oauth1/package.js +++ b/packages/oauth1/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth1-based login services", - version: "1.5.0", + version: "1.5.1", }); Package.onUse(api => { @@ -8,10 +8,7 @@ Package.onUse(api => { api.use('random'); api.use('service-configuration', ['client', 'server']); api.use('oauth', ['client', 'server']); - api.use([ - 'check', - 'http@1.4.4 || 2.0.0' - ], 'server'); + api.use('check', 'server'); api.use('mongo'); diff --git a/packages/oauth2/oauth2_server.js b/packages/oauth2/oauth2_server.js index cf990d8691..86eead93ba 100644 --- a/packages/oauth2/oauth2_server.js +++ b/packages/oauth2/oauth2_server.js @@ -1,5 +1,5 @@ // connect middleware -OAuth._requestHandlers['2'] = (service, query, res) => { +OAuth._requestHandlers['2'] = async (service, query, res) => { let credentialSecret; // check if user authorized access @@ -7,7 +7,7 @@ OAuth._requestHandlers['2'] = (service, query, res) => { // Prepare the login results before returning. // Run service-specific handler. - const oauthResult = service.handleOauthRequest(query); + const oauthResult = await service.handleOauthRequest(query); credentialSecret = Random.secret(); const credentialToken = OAuth._credentialTokenFromQuery(query); diff --git a/packages/oauth2/oauth2_tests.js b/packages/oauth2/oauth2_tests.js index 1ce47813b4..49b94f4eb0 100644 --- a/packages/oauth2/oauth2_tests.js +++ b/packages/oauth2/oauth2_tests.js @@ -1,6 +1,6 @@ import http from 'http'; -const testPendingCredential = function (test, method) { +const testPendingCredential = async function (test, method) { const foobookId = Random.id(); const foobookOption1 = Random.id(); const credentialToken = Random.id(); @@ -51,7 +51,7 @@ const testPendingCredential = function (test, method) { return end.apply(this, args); }; - OAuthTest.middleware(req, res); + await OAuthTest.middleware(req, res); const credentialSecret = respData; // Test that the result for the token is available @@ -72,17 +72,17 @@ const testPendingCredential = function (test, method) { } }; -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (without oauth encryption)", async test => { OAuthEncryption.loadKey(null); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); }); -Tinytest.add("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", test => { +Tinytest.addAsync("oauth2 - pendingCredential is stored and can be retrieved (with oauth encryption)", async test => { try { OAuthEncryption.loadKey(Buffer.from([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64")); - testPendingCredential(test, "GET"); - testPendingCredential(test, "POST"); + await testPendingCredential(test, "GET"); + await testPendingCredential(test, "POST"); } finally { OAuthEncryption.loadKey(null); } diff --git a/packages/oauth2/package.js b/packages/oauth2/package.js index c5f2fd0917..4ba099aa41 100644 --- a/packages/oauth2/package.js +++ b/packages/oauth2/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Common code for OAuth2-based login services", - version: "1.3.1", + version: "1.3.2", }); Package.onUse(api => { diff --git a/packages/package-version-parser/package-version-parser-tests.js b/packages/package-version-parser/package-version-parser-tests.js index 855dc56057..ff82ae9086 100644 --- a/packages/package-version-parser/package-version-parser-tests.js +++ b/packages/package-version-parser/package-version-parser-tests.js @@ -464,14 +464,14 @@ Tinytest.add("package-version-parser - Invalid in 0.9.2", function (test) { var invalidVersions = ["1.0.0_1", "1.0.0 || 2.0.0", "1.0.0-rc1_1", "3.4.0-rc1 || =1.0.0"]; - _.each(invalidVersions, function (v) { + invalidVersions.forEach(function (v) { test.isTrue(PackageVersion.invalidFirstFormatConstraint(v)); }); // These are all valid in 0.9.2. var validVersions = ["1.0.0", "2.0.0-rc1", "=2.5.0"]; - _.each(validVersions, function (v) { + validVersions.forEach(function (v) { test.isFalse(PackageVersion.invalidFirstFormatConstraint(v)); }); }); diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 4c6ff0dc62..78a084498d 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Parses Meteor Smart Package version strings", - version: "3.2.0" + version: "3.2.1" }); Npm.depends({ @@ -14,7 +14,6 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use('package-version-parser'); - api.use(['tinytest', 'underscore']); + api.use(['package-version-parser', 'tinytest']); api.addFiles('package-version-parser-tests.js', 'server'); }); diff --git a/packages/promise/package.js b/packages/promise/package.js index 181ef21b3b..fcf72881c5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.12.1", + version: "0.12.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/promise/server.js b/packages/promise/server.js index e07faeb52b..2f5f59a3c0 100644 --- a/packages/promise/server.js +++ b/packages/promise/server.js @@ -1,11 +1,13 @@ require("./extensions.js"); -require("meteor-promise").makeCompatible( - Promise, - // Allow every Promise callback to run in a Fiber drawn from a pool of - // reusable Fibers. - require("fibers") -); +if (!process.env.DISABLE_FIBERS) { + require("meteor-promise").makeCompatible( + Promise, + // Allow every Promise callback to run in a Fiber drawn from a pool of + // reusable Fibers. + require("fibers") + ); +} // Reference: https://caniuse.com/#feat=promises require("meteor/modern-browsers").setMinimumBrowserVersions({ diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index 97e0d8f3eb..7d6b2746e9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.8.2', + version: '1.8.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/standard-minifier-css/plugin/minify-css.js b/packages/standard-minifier-css/plugin/minify-css.js index 2b8c4d5e44..8ac2b0db75 100644 --- a/packages/standard-minifier-css/plugin/minify-css.js +++ b/packages/standard-minifier-css/plugin/minify-css.js @@ -60,7 +60,7 @@ class CssToolsMinifier { path: 'merged-stylesheets.css' }]; } else { - const minifiedFiles = CssTools.minifyCss(merged.code); + const minifiedFiles = await CssTools.minifyCssAsync(merged.code); result = minifiedFiles.map(minified => ({ data: minified diff --git a/packages/test-helpers/async_multi.js b/packages/test-helpers/async_multi.js index e5ec3cb43c..04be6aedfe 100644 --- a/packages/test-helpers/async_multi.js +++ b/packages/test-helpers/async_multi.js @@ -142,8 +142,13 @@ testAsyncMulti = function (name, funcs, { isOnly = false } = {}) { test.extraDetails.asyncBlock = i++; new Promise(resolve => { - resolve(func.apply(context, [test, _.bind(em.expect, em)])); - }).then(result => { + const result = func.apply(context, [test, _.bind(em.expect, em)]); + if (result && typeof result.then === "function") { + return result.then((r) => resolve(r)) + } + + return resolve(result); + }).then(() => { em.done(); }, exception => { if (em.cancel()) { @@ -191,3 +196,24 @@ pollUntil = function (expect, f, timeout, step, noFail) { step ); }; + +/** + * Helper that is used on the async tests. + * Just run the function and assert if we have an error or not. + * @param fn + * @param test + * @param shouldErrorOut + * @returns {Promise<*>} + */ +runAndThrowIfNeeded = async (fn, test, shouldErrorOut) => { + let err, result; + try { + result = await fn(); + } catch (e) { + err = e; + } + + test[shouldErrorOut ? "isTrue" : "isFalse"](err); + + return result; +}; diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 17b6e0f37a..399e768cbe 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Utility functions for tests", - version: '1.3.0' + version: '1.3.1' }); Package.onUse(function (api) { @@ -28,7 +28,8 @@ Package.onUse(function (api) { 'SeededRandom', 'clickElement', 'blurElement', 'focusElement', 'simulateEvent', 'getStyleProperty', 'canonicalizeHtml', 'renderToDiv', 'clickIt', - 'withCallbackLogger', 'testAsyncMulti', 'simplePoll', + 'withCallbackLogger', 'testAsyncMulti', + 'simplePoll', 'runAndThrowIfNeeded', 'makeTestConnection', 'DomUtils']); api.addFiles('try_all_permutations.js'); diff --git a/packages/test-in-browser/driver.js b/packages/test-in-browser/driver.js index d0d5fa4423..b8fb0a9ecf 100644 --- a/packages/test-in-browser/driver.js +++ b/packages/test-in-browser/driver.js @@ -451,7 +451,7 @@ Template.test.helpers({ eventsArray: function() { var events = this.events.filter(function(e) { - return e[type] != "finish"; + return e.type != "finish"; }); var partitionBy = function(seq, func) { @@ -583,4 +583,4 @@ Template.event.helpers({ is_debuggable: function() { return !!this.cookie; } -}); \ No newline at end of file +}); diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index a090172f76..57e3474024 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.3.1', + version: '1.3.2', documentation: null }); diff --git a/packages/test-in-console/puppeteerRunner.js b/packages/test-in-console/puppeteerRunner.js index a2d07f633f..c6509bd93d 100644 --- a/packages/test-in-console/puppeteerRunner.js +++ b/packages/test-in-console/puppeteerRunner.js @@ -1,12 +1,16 @@ const puppeteer = require('../../dev_bundle/lib/node_modules/puppeteer'); +let testNumber = 0; + async function runNextUrl(browser) { const page = await browser.newPage(); page.on('console', msg => { - if (msg._text !== undefined) { - console.log(msg._text); - } + // this is a way to make sure the travis does not timeout + // if the test is running for too long without any output to the console (10 minutes) + if (msg._text !== undefined) console.log(msg._text); + else console.log(`Test number: ${ testNumber }`); + testNumber++; }); if (!process.env.URL) { @@ -19,11 +23,15 @@ async function runNextUrl(browser) { async function poll() { if (await isDone(page)) { let failCount = await getFailCount(page); - console.log(`Tests complete with ${failCount} failures`); - console.log(`Tests complete with ${await getPassCount(page)} passes`); + console.log(` + The number of tests from Test number may be different because + of the way the test is written. causing the test to fail or + to run more than once. in the console. Test number total: ${ testNumber }`); + console.log(`Tests complete with ${ failCount } failures`); + console.log(`Tests complete with ${ await getPassCount(page) } passes`); if (failCount > 0) { const failed = await getFailed(page); - failed.map( (f) => console.log(`${f.name} failed: ${f.info}`)); + failed.map((f) => console.log(`${ f.name } failed: ${ f.info }`)); await page.close(); await browser.close(); process.exit(1); @@ -46,7 +54,7 @@ async function runNextUrl(browser) { * @return {Promise} */ async function isDone(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.DONE; } @@ -61,7 +69,7 @@ async function isDone(page) { * @return {Promise} */ async function getPassCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.PASSED; } @@ -76,7 +84,7 @@ async function getPassCount(page) { * @return {Promise} */ async function getFailCount(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.FAILURES; } @@ -95,7 +103,7 @@ async function getFailCount(page) { * @return {Promise<[{name: string, info: string}]>} */ async function getFailed(page) { - return await page.evaluate(function() { + return await page.evaluate(function () { if (typeof TEST_STATUS !== 'undefined') { return TEST_STATUS.WHERE_FAILED; } @@ -104,11 +112,11 @@ async function getFailed(page) { } async function runTests() { - console.log(`Running test with Puppeteer at ${process.env.URL}`); + console.log(`Running test with Puppeteer at ${ process.env.URL }`); // --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - console.log(`Using version: ${await browser.version()}`); + console.log(`Using version: ${ await browser.version() }`); runNextUrl(browser); } diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index 862749494b..21a7a053f3 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Tiny testing framework", - version: '1.2.1' + version: '1.2.2' }); Package.onUse(function (api) { diff --git a/packages/tinytest/tinytest.js b/packages/tinytest/tinytest.js index 045548c6de..f5cd025b98 100644 --- a/packages/tinytest/tinytest.js +++ b/packages/tinytest/tinytest.js @@ -1,5 +1,3 @@ -const Future = Meteor.isServer && require('fibers/future'); - /******************************************************************************/ /* TestCaseResults */ /******************************************************************************/ @@ -186,6 +184,43 @@ export class TestCaseResults { this.ok(); } + _assertActual(actual, predicate, message) { + if (actual && predicate(actual)) + this.ok(); + else + this.fail({ + type: "throws", + message: (actual ? + "wrong error thrown: " + actual.message : + "did not throw an error as expected") + (message ? ": " + message : ""), + }); + } + + _guessPredicate(expected) { + let predicate; + + if (expected === undefined) { + predicate = function () { + return true; + }; + } else if (typeof expected === "string") { + predicate = function (actual) { + return typeof actual.message === "string" && + actual.message.indexOf(expected) !== -1; + }; + } else if (expected instanceof RegExp) { + predicate = function (actual) { + return expected.test(actual.message); + }; + } else if (typeof expected === 'function') { + predicate = expected; + } else { + throw new Error('expected should be a string, regexp, or predicate function'); + } + + return predicate; + } + // expected can be: // undefined: accept any exception. // string: pass if the string is a substring of the exception message. @@ -204,26 +239,8 @@ export class TestCaseResults { // particular class, use a predicate function. // throws(f, expected, message) { - var actual, predicate; - - if (expected === undefined) { - predicate = function (actual) { - return true; - }; - } else if (typeof expected === "string") { - predicate = function (actual) { - return typeof actual.message === "string" && - actual.message.indexOf(expected) !== -1; - }; - } else if (expected instanceof RegExp) { - predicate = function (actual) { - return expected.test(actual.message); - }; - } else if (typeof expected === 'function') { - predicate = expected; - } else { - throw new Error('expected should be a string, regexp, or predicate function'); - } + let actual; + const predicate = this._guessPredicate(expected); try { f(); @@ -231,15 +248,27 @@ export class TestCaseResults { actual = exception; } - if (actual && predicate(actual)) - this.ok(); - else - this.fail({ - type: "throws", - message: (actual ? - "wrong error thrown: " + actual.message : - "did not throw an error as expected") + (message ? ": " + message : ""), - }); + this._assertActual(actual, predicate, message); + } + + /** + * Same as throw, but accepts an async function as a parameter. + * @param f + * @param expected + * @param message + * @returns {Promise} + */ + async throwsAsync(f, expected, message) { + let actual; + const predicate = this._guessPredicate(expected); + + try { + await f(); + } catch (exception) { + actual = exception; + } + + this._assertActual(actual, predicate, message); } isTrue(v, msg) { @@ -309,7 +338,7 @@ export class TestCaseResults { pass = true; } } else { - /* fail -- not something that contains other things */; + /* fail -- not something that contains other things */ } if (pass === ! not) { @@ -546,37 +575,37 @@ export class TestRun { } if (Meteor.isServer) { - // On the server, ensure that only one test runs at a time, even - // with multiple clients. this.manager.testQueue.queueTask(() => { - // The future resolves when the test completes or times out. - var future = new Future(); - Meteor.setTimeout( - () => { - if (future.isResolved()) - // If the future has resolved the test has completed. - return; - test.timedOut = true; - this._report(test, { - type: "exception", - details: { - message: "test timed out" - } - }); - future['return'](); - }, - 3 * 60 * 1000 // 3 minutes - ); - this._runTest(test, () => { - // The test can complete after it has timed out (it might - // just be slow), so only resolve the future if the test - // hasn't timed out. - if (! future.isResolved()) - future['return'](); - }, stop_at_offset); - // Wait for the test to complete or time out. - future.wait(); - onComplete && onComplete(); + // On the server, ensure that only one test runs at a time, even + // with multiple clients. + let hasRan = false; + const timeoutPromise = new Promise((resolve) => { + Meteor.setTimeout(() => { + if (!hasRan) { + test.timedOut = true; + this._report(test, { + type: "exception", + details: { + message: "test timed out" + } + }); + } + + resolve(); + }, 3 * 60 * 1000); + }); + const runnerPromise = new Promise((resolve) => { + this._runTest(test, () => { + if (!hasRan) { + hasRan = true; + } + resolve(); + }, stop_at_offset); + }); + + Promise.race([runnerPromise, timeoutPromise]).finally(() => { + onComplete && onComplete(); + }); }); } else { // client diff --git a/packages/tinytest/tinytest_server.js b/packages/tinytest/tinytest_server.js index c43fb12b34..331a7007e7 100644 --- a/packages/tinytest/tinytest_server.js +++ b/packages/tinytest/tinytest_server.js @@ -9,7 +9,7 @@ import { export { Tinytest }; -const Fiber = require('fibers'); +const Fiber = Meteor._isFibersEnabled && require('fibers'); const handlesForRun = new Map; const reportsForRun = new Map; @@ -58,7 +58,7 @@ Meteor.methods({ } function onReport(report) { - if (! Fiber.current) { + if (Fiber && !Fiber.current) { Meteor._debug("Trying to report a test not in a fiber! "+ "You probably forgot to wrap a callback in bindEnvironment."); console.trace(); diff --git a/packages/twitter-oauth/package.js b/packages/twitter-oauth/package.js index 6a8bd6793b..62d7646ca8 100644 --- a/packages/twitter-oauth/package.js +++ b/packages/twitter-oauth/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Twitter OAuth flow", - version: '1.3.1' + version: '1.3.2' }); Package.onUse(function(api) { diff --git a/packages/twitter-oauth/twitter_server.js b/packages/twitter-oauth/twitter_server.js index 6a973ac57d..090d455172 100644 --- a/packages/twitter-oauth/twitter_server.js +++ b/packages/twitter-oauth/twitter_server.js @@ -15,9 +15,9 @@ var urls = { // https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials Twitter.whitelistedFields = ['profile_image_url', 'profile_image_url_https', 'lang', 'email']; -OAuth.registerService('twitter', 1, urls, function(oauthBinding) { - var identity = oauthBinding.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true').data; - +OAuth.registerService('twitter', 1, urls, async function(oauthBinding) { + const response = await oauthBinding.getAsync('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true'); + const { data: identity } = response; var serviceData = { id: identity.id_str, screenName: identity.screen_name, diff --git a/packages/typescript/package.js b/packages/typescript/package.js index df071432b9..21db263e8c 100644 --- a/packages/typescript/package.js +++ b/packages/typescript/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'typescript', - version: '4.5.4', + version: '4.6.4', summary: 'Compiler plugin that compiles TypeScript and ECMAScript in .ts and .tsx files', documentation: 'README.md', diff --git a/packages/weibo-oauth/package.js b/packages/weibo-oauth/package.js index 02cea0b9c6..e2de8dd3ba 100644 --- a/packages/weibo-oauth/package.js +++ b/packages/weibo-oauth/package.js @@ -1,13 +1,12 @@ Package.describe({ summary: "Weibo OAuth flow", - version: "1.3.1", + version: "1.3.2", }); Package.onUse(api => { api.use('oauth1', ['client', 'server']); api.use('oauth', ['client', 'server']); api.use('random', 'client'); - api.use('http@1.4.4 || 2.0.0', 'server'); api.use(['service-configuration', 'ecmascript'], ['client', 'server']); api.addFiles('weibo_client.js', 'client'); diff --git a/packages/weibo-oauth/weibo_server.js b/packages/weibo-oauth/weibo_server.js index 539022aa8d..24d56438fd 100644 --- a/packages/weibo-oauth/weibo_server.js +++ b/packages/weibo-oauth/weibo_server.js @@ -1,8 +1,8 @@ Weibo = {}; -OAuth.registerService('weibo', 2, null, query => { +OAuth.registerService('weibo', 2, null, async query => { - const response = getTokenResponse(query); + const response = await getTokenResponse(query); const uid = parseInt(response.uid, 10); // different parts of weibo's api seem to expect numbers, or strings @@ -11,7 +11,7 @@ OAuth.registerService('weibo', 2, null, query => { throw new Error(`Expected 'uid' to parse to an integer: ${JSON.stringify(response)}`); } - const identity = getIdentity(response.access_token, uid); + const identity = await getIdentity(response.access_token, uid); return { serviceData: { @@ -31,46 +31,48 @@ OAuth.registerService('weibo', 2, null, query => { // - uid // - access_token // - expires_in: lifetime of this token in seconds (5 years(!) right now) -const getTokenResponse = query => { - const config = ServiceConfiguration.configurations.findOne({service: 'weibo'}); - if (!config) - throw new ServiceConfiguration.ConfigError(); +const getTokenResponse = async (query) => { + const config = ServiceConfiguration.configurations.findOne({ + service: 'weibo', + }); + if (!config) throw new ServiceConfiguration.ConfigError(); - let response; - try { - response = HTTP.post( - "https://api.weibo.com/oauth2/access_token", {params: { - code: query.code, - client_id: config.clientId, - client_secret: OAuth.openSecret(config.secret), - redirect_uri: OAuth._redirectUri('weibo', config, null, {replaceLocalhost: true}), - grant_type: 'authorization_code' - }}); - } catch (err) { - throw Object.assign(new Error(`Failed to complete OAuth handshake with Weibo. ${err.message}`), - {response: err.response}); - } - - // result.headers["content-type"] is 'text/plain;charset=UTF-8', so - // the http package doesn't automatically populate result.data - response.data = JSON.parse(response.content); - - if (response.data.error) { // if the http response was a json object with an error attribute - throw new Error(`Failed to complete OAuth handshake with Weibo. ${response.data.error}`); - } else { - return response.data; - } + return OAuth._fetch('https://api.weibo.com/oauth2/access_token', 'POST', { + queryParams: { + code: query.code, + client_id: config.clientId, + client_secret: OAuth.openSecret(config.secret), + redirect_uri: OAuth._redirectUri('weibo', config, null, { + replaceLocalhost: true, + }), + grant_type: 'authorization_code', + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error( + `Failed to complete OAuth handshake with Weibo. ${err.message}` + ), + { response: err.response } + ); + }); }; -const getIdentity = (accessToken, userId) => { - try { - return HTTP.get( - "https://api.weibo.com/2/users/show.json", - {params: {access_token: accessToken, uid: userId}}).data; - } catch (err) { - throw Object.assign(new Error("Failed to fetch identity from Weibo. " + err.message), - {response: err.response}); - } +const getIdentity = async (accessToken, userId) => { + return OAuth._fetch('https://api.weibo.com/2/users/show.json', 'GET', { + queryParams: { + access_token: accessToken, + uid: userId, + }, + }) + .then((res) => res.json()) + .catch((err) => { + throw Object.assign( + new Error('Failed to fetch identity from Weibo. ' + err.message), + { response: err.response } + ); + }); }; Weibo.retrieveCredential = (credentialToken, credentialSecret) => diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e475269aa6..acce35a806 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.1-rc.0", + "version": "2.9.0", "recommended": false, "official": false, "description": "Meteor experimental release" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index f5d6c4d09d..27a0c865e4 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "2.8.2", + "version": "2.9.0", "recommended": false, "official": true, "description": "The Official Meteor Distribution" diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index ce78281faa..c265734f8a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.16.1-beta.0", + "@meteorjs/babel": "7.17.2-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", diff --git a/tools/cli/commands-packages.js b/tools/cli/commands-packages.js index 2c8f3ff4e2..6a5c4d071c 100644 --- a/tools/cli/commands-packages.js +++ b/tools/cli/commands-packages.js @@ -883,7 +883,7 @@ main.registerCommand({ relConf.packages = {}; var toPublish = []; - + Console.info(`Will publish new version for MeteorJS: ${relConf.version}`); main.captureAndExit("=> Errors in release packages:", function () { _.each(allPackages, function (packageName) { buildmessage.enterJob("checking consistency of " + packageName, function () { diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 4a726cb3f3..22ffdebaeb 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -12,6 +12,13 @@ var archinfo = require('../utils/archinfo'); var catalog = require('../packaging/catalog/catalog.js'); var stats = require('../meteor-services/stats.js'); var Console = require('../console/console.js').Console; +const { + blue, + green, + purple, + red, + yellow +} = require('../console/console.js').colors; var projectContextModule = require('../project-context.js'); var release = require('../packaging/release.js'); @@ -533,12 +540,14 @@ main.registerCommand({ blaze: { type: Boolean }, react: { type: Boolean }, vue: { type: Boolean }, + 'vue-2': { type: Boolean }, typescript: { type: Boolean }, apollo: { type: Boolean }, svelte: { type: Boolean }, tailwind: { type: Boolean }, 'chakra-ui': { type: Boolean }, solid: { type: Boolean }, + prototype: { type: Boolean } }, catalogRefresh: new catalog.Refresh.Never() }, function (options) { @@ -547,7 +556,13 @@ main.registerCommand({ // latest release to create a package if we are inside an app) if (options.package) { var packageName = options.args[0]; - + if (options.prototype) { + Console.error( + `The ${Console.command('--prototype')} option is no longer supported for packages.` + ); + Console.error(); + throw new main.ShowUsage; + } if (options.list || options.example) { Console.error("No package examples exist at this time."); Console.error(); @@ -790,6 +805,22 @@ main.registerCommand({ return transform(f); }, transformContents: function (contents, f) { + + // check if this app is just for prototyping if it is then we need to add autopublish and insecure in the packages file + if ((/packages/).test(f)) { + + const prototypePackages = + () => + 'autopublish # Publish all data to the clients (for prototyping)\n' + + 'insecure # Allow all DB writes from clients (for prototyping)'; + + // XXX: if there is the need to add more options maybe we should have a better abstraction for this if-else + if (options.prototype) { + return Buffer.from(contents.toString().replace(/~prototype~/g, prototypePackages())) + } else { + return Buffer.from(contents.toString().replace(/~prototype~/g, '')) + } + } if ((/(\.html|\.[jt]sx?|\.css)/).test(f)) { return Buffer.from(transform(contents.toString())); } else { @@ -905,7 +936,8 @@ main.registerCommand({ cmd("meteor create --minimal # to create an app with as few Meteor packages as possible"); cmd("meteor create --full # to create a more complete scaffolded app"); cmd("meteor create --react # to create a basic React-based app"); - cmd("meteor create --vue # to create a basic Vue-based app"); + cmd("meteor create --vue # to create a basic Vue3-based app"); + cmd("meteor create --vue-2 # to create a basic Vue2-based app"); cmd("meteor create --apollo # to create a basic Apollo + React app"); cmd("meteor create --svelte # to create a basic Svelte app"); cmd("meteor create --typescript # to create an app using TypeScript and React"); @@ -2508,6 +2540,298 @@ main.registerCommand({ }); +/////////////////////////////////////////////////////////////////////////////// +// generate +/////////////////////////////////////////////////////////////////////////////// + +/** + * + * @param question + * @returns {function(string): Promise} + */ +const createPrompt = () => { + const readline = require('readline') + .createInterface({ input: process.stdin, output: process.stdout }); + return async (question) => new Promise((resolve, reject) => { + readline.question(question, (answer) => { + resolve(answer); + }) + }) +} + +const sanitizeBoolAnswer = (string) => { + if (string === '') return true; + + if (string.toLowerCase() === 'y' || string.toLowerCase() === 'yes') return true; + + if (string.toLowerCase() === 'n' || string.toLowerCase() === 'no' ) return false; + + Console.error(red('You must provide a valid answer')); + Console.error(yellow('it should be either (y)es or (n)o or just press enter to accept the default value')); + throw new main.ExitWithCode(2); +} + +/** + * simple verification for the name + * @param scaffoldName {string} + */ +const checkScaffoldName = (scaffoldName) => { + if (scaffoldName === '') { + Console.error(red('You must provide a name for your model.')); + Console.error(yellow('Model names should not be empty.')); + throw new main.ExitWithCode(2); + } + + if (scaffoldName.includes('/')) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain slashes.')); + throw new main.ExitWithCode(2); + } + + const allNonWordRegex = /[^a-zA-Z0-9_-]/g; // all numbers and letters plus _ and - + if (allNonWordRegex.test(scaffoldName)) { + Console.error(red('You must provide a valid name for your model.')); + Console.error(yellow('Model names should not contain special characters except _ and -')); + throw new main.ExitWithCode(2); + } +} + +main.registerCommand({ + name: 'generate', + maxArgs: 1, + minArgs: 0, + options: { + path: { type: String }, + methods: { type: Boolean }, + publications: { type: Boolean }, + templatePath : { type: String }, + replaceFn : { type: String }, + }, + pretty: false, + catalogRefresh: new catalog.Refresh.Never() +}, async function (options) { + const { args, appDir } = options; + + const setup = async (arg0) => { + if (arg0 === undefined) { + const ask = createPrompt(); + // the ANSI color chart is here: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + const scaffoldName = await ask(`What is the name of your ${yellow('model')}? `); + checkScaffoldName(scaffoldName); + const areMethods = await ask(`There will be methods [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); + const methods = sanitizeBoolAnswer(areMethods); + const arePublications = await ask(`There will be publications [${green('Y')}/${red('n')}]? press enter for ${green('yes')} `); + const publications = sanitizeBoolAnswer(arePublications); + const path = await ask(`Where it will be placed? press enter for ${yellow('./imports/api/')} `); + return { + isWizard: true, + scaffoldName, + path, + methods, + publications, + } + } + + const { + path, + methods, + publications + } = options; + + return { + isWizard: false, + scaffoldName: arg0, + path, + methods, + publications, + } + } + /** + * @type{string} + */ + const { + isWizard, + scaffoldName, + path, + methods, + publications + } = await setup(args[0]); + + checkScaffoldName(scaffoldName); + // get directory where we will place our files + const scaffoldPath = path ||`${ appDir }/imports/api/${ scaffoldName }`; + + /** + * + * @param appDir + * @returns {string[]} + */ + const getFilesInDir = (appDir) => { + const appPath = files.pathResolve(appDir); + return files.readdir(appPath); + } + + const getExtension = () => { + const rootFiles = getFilesInDir(appDir); + if (rootFiles.includes('tsconfig.json')) return 'ts' + else return 'js' + } + + /** + * + * @returns {string} + */ + const userTransformFilenameFn = (filename) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformFilename; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformFilename.')); + Console.error(yellow('The function should be named transformFilename and should be exported.')); + throw new main.ExitWithCode(2); + } + return replaceFn(scaffoldName, filename); + } + /** + * + * @returns {string} + */ + const userTransformContentsFn = (contents, fileName) => { + const path = files.pathResolve(files.pathJoin(appDir, options.replaceFn)); + const replaceFn = require(path).transformContents; + if (typeof replaceFn !== 'function') { + Console.error(red('You must provide a valid function transformContents.')); + Console.error(yellow('The function should be named transformContents and should be exported.')); + throw new main.ExitWithCode(2); + } + return replaceFn(scaffoldName, contents, fileName); + } + + /** + * if contains - turns into pascal + * @param str{string} + * @returns {string} + */ + const toPascalCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toUpperCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } + const toCamelCase = (str) => { + if(!str.includes('-')) return str.charAt(0).toLowerCase() + str.slice(1); + else return str.split('-').map(toPascalCase).join(''); + } + + /** + * + * @param name {string} + */ + const transformName = (name) => { + return name.replace(/\$\$name\$\$|\$\$PascalName\$\$|\$\$camelName\$\$/g, function (substring, args) { + if (substring === '$$name$$') return scaffoldName; + if (substring === '$$PascalName$$') return toPascalCase(scaffoldName); + if (substring === '$$camelName$$') return toCamelCase(scaffoldName); + }) + } + + /** + * + * @param content{string} + * @param fileName{string} + * @returns {string} + */ + const removeUnusedLines = (content, fileName) => { + if (methods && publications) return content; + if (!methods && !publications) return content; + if(!fileName.startsWith('index')) return content; + return content + .split('\n') + .filter(line => { + if (!methods && line.includes('methods')) return false; + if (!publications && line.includes('publications')) return false; + return true; + }) + .join('\n'); + } + /// Program + const rootFiles = getFilesInDir(appDir); + if (!rootFiles.includes('.meteor')) { + Console.error(red('You must be in a Meteor project to run this command')); + Console.error(yellow('You can create a new Meteor project with `meteor create`')); + throw new main.ExitWithCode(2); + } + + const extension = getExtension() + const assetsPath = () => { + if (options.templatePath){ + const templatePath = files.pathJoin(appDir, options.templatePath) + Console.info(`Using template that is in: ${purple(templatePath)}`) + return templatePath; + } + return files.pathJoin( + __dirnameConverted, + '..', + 'static-assets', + `scaffolds-${ extension }`) + } + // create directory + const isOk = files.mkdir_p(scaffoldPath); + if (!isOk) { + Console.error(red('Something went wrong when creating the folder')); + Console.error(yellow('Do you have the correct permissions?')); + throw new main.ExitWithCode(2); + } + + files.cp_r(assetsPath(), files.pathResolve(scaffoldPath), { + transformFilename: function (f) { + if (options.replaceFn) return userTransformFilenameFn(f); + return transformName(f); + }, + transformContents: function (contents, fileName) { + if (options.replaceFn) return userTransformContentsFn(contents.toString(), fileName); + const cleaned = removeUnusedLines(contents.toString(), fileName); + return transformName(cleaned); + } + }) + + const checkAndRemoveFiles = () => { + if (!methods) + files.unlink(files.pathJoin(scaffoldPath, `methods.${ extension }`)); + + if (!publications) + files.unlink(files.pathJoin(scaffoldPath, `publications.${ extension }`)); + } + + const xor = (a, b) => ( a || b ) && !( a && b ); + + if (!isWizard && xor(methods, publications)) { + checkAndRemoveFiles() + } + + if (isWizard) { + checkAndRemoveFiles() + } + + const packageJsonPath = files.pathJoin(appDir, 'package.json'); + const packageJsonFile = files.readFile(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(packageJsonFile); + + const mainJsPath = + packageJson?.meteor?.mainModule?.server + ? files.pathJoin(appDir, packageJson.meteor.mainModule.server) + : files.pathJoin(appDir, 'server', 'main.js'); + const mainJs = files.readFile(mainJsPath); + const mainJsLines = mainJs.toString().split('\n'); + const importLine = path + ? `import '${path}';` + : `import '/imports/api/${ scaffoldName }';` + const mainJsFile = [importLine, ...mainJsLines].join('\n'); + files.writeFile(mainJsPath, mainJsFile); + + Console.info(`Created ${ blue(scaffoldName) } scaffold in ${ yellow(scaffoldPath) }`); + + return 0; +}); + + /////////////////////////////////////////////////////////////////////////////// // admin get-machine /////////////////////////////////////////////////////////////////////////////// diff --git a/tools/cli/help.txt b/tools/cli/help.txt index 8091e7b025..71b63daf23 100644 --- a/tools/cli/help.txt +++ b/tools/cli/help.txt @@ -150,7 +150,7 @@ Options: >>> create Create a new project. -Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] +Usage: meteor create [--release ] [--bare|--minimal|--full|--react|--vue|--vue-2|--apollo|--svelte|--blaze|--tailwind|--chakra-ui|--solid] meteor create [--release ] --example [] meteor create --list meteor create --package [] @@ -183,7 +183,8 @@ Options: --minimal Create an app with as few Meteor packages as possible. --full Create a fully scaffolded app. --react Create a basic react-based app, same as default. - --vue Create a basic vue-based app. + --vue Create a basic vue3-based app. + --vue-2 Create a basic vue2-based app. --apollo Create a basic apollo-based app. --svelte Create a basic svelte-based app. --typescript Create a basic Typescript React-based app. @@ -191,6 +192,7 @@ Options: --tailwind Create a basic react-based app, with tailwind configured. --chakra-ui Create a basic react-based app, with chakra-ui configured. --solid Create a basic solid-based app. + --prototype Create a prototype app with the insecure & autopublish packages. Can be used along with other app commands >>> update @@ -841,6 +843,34 @@ command. To see sites in a region other than us-east-1, set the DEPLOY_HOSTNAME environment variable. For example, `DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com meteor list-sites` +>>> generate + +Generate boilerplate code for a MeteorJS RPC api. +It generates a collection with the name you pass and its methods. +Is JS and TS compatible. No collection name +runs the wizard. + +Usage: meteor generate [] [options] + +By default, generates a collection.ts|js file with the name you pass, +methods(insert, update, remove, find, findOne) in a methods.js|ts file +and publications.js|ts. If you just use the command without collectionName, +it will generate run the wizard, asking you what is necessary. + +We do have as well the templatePath, wich uses the template you pass to generate +the boilerplate code. You can use the default template or create your own. +for replacing the names, we offer $$PascalName$$, $$camelName$$, $$name$$. + +This is a MeteorJS project command. + +Options: + --help Show help. + --path The path to the folder where the files will be generated. Default is the current folder. + --templatePath Path to the template file check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --replaceFn Replace function to replace the names in the template. Check https://docs.meteor.com/commandline.html#meteorgenerate-templating for more info. + --methods Generate methods. + --publications Generate publications. + >>> publish-release Publish a new meteor release to the package server. diff --git a/tools/console/console.js b/tools/console/console.js index 16ebd55da9..7715560354 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -1320,4 +1320,19 @@ class Console extends ConsoleBase { } } +const yellow = (text) => `\x1b[33m${ text }\x1b[0m`; +const red = (text) => `\x1b[31m${ text }\x1b[0m`; +const purple = (text) => `\x1b[35m${ text }\x1b[0m`; +const green = (text) => `\x1b[32m${ text }\x1b[0m`; +const blue = (text) => `\x1b[34m${ text }\x1b[0m`; + +const colors = { + yellow, + red, + purple, + green, + blue, +}; + +exports.colors = colors; exports.Console = new Console; diff --git a/tools/packaging/package-client.js b/tools/packaging/package-client.js index 78af222cfd..3075970647 100644 --- a/tools/packaging/package-client.js +++ b/tools/packaging/package-client.js @@ -809,7 +809,6 @@ exports.publishPackage = function (options) { // XXX If package version already exists, print a nice error message // telling them to try 'meteor publish-for-arch' if they want to // publish a new build. - // Documentation is smaller than the source. Upload it first, to minimize // the chances of PUT URLs expiring. (XXX: in the far future, parallelize this) buildmessage.enterJob("uploading documentation", function () { diff --git a/tools/static-assets/README.md b/tools/static-assets/README.md index db232e18af..1884abb1d6 100644 --- a/tools/static-assets/README.md +++ b/tools/static-assets/README.md @@ -40,6 +40,14 @@ Similar to `skel`, `skel-chakra-ui` is copied on `meteor create --chakra-ui` com Similar to `skel`, `skel-solid` is copied on `meteor create --solid` command. +## skel-vue - Package Skeleton + +Similar to `skel`, `skel-vue` is copied on `meteor create --vue` command. + +## skel-vue-2 - Package Skeleton + +Similar to `skel`, `skel-vue-2` is copied on `meteor create --vue-2` command. + ## server - Bundled App's Bootstrap The `server` folder is copied by Isobuild when the app is bundled (on diff --git a/tools/static-assets/scaffolds-js/collection.js b/tools/static-assets/scaffolds-js/collection.js new file mode 100644 index 0000000000..a8a92d7cde --- /dev/null +++ b/tools/static-assets/scaffolds-js/collection.js @@ -0,0 +1,3 @@ +import { Mongo } from 'meteor/mongo'; + +export const $$PascalName$$Collection = new Mongo.Collection('$$name$$'); diff --git a/tools/static-assets/scaffolds-js/index.js b/tools/static-assets/scaffolds-js/index.js new file mode 100644 index 0000000000..59951d14bb --- /dev/null +++ b/tools/static-assets/scaffolds-js/index.js @@ -0,0 +1,3 @@ +export * from './collection'; +export * from './methods'; +export * from './publications'; diff --git a/tools/static-assets/scaffolds-js/methods.js b/tools/static-assets/scaffolds-js/methods.js new file mode 100644 index 0000000000..415f0ebb0a --- /dev/null +++ b/tools/static-assets/scaffolds-js/methods.js @@ -0,0 +1,29 @@ +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; +import { $$PascalName$$Collection } from './collection'; + +export async function create(data) { + return $$PascalName$$Collection.insertAsync({ ...data }); +} + +export async function update(_id, data) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); +} + +export async function remove(_id) { + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); +} + +export async function findById(_id) { + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById +}); diff --git a/tools/static-assets/scaffolds-js/publications.js b/tools/static-assets/scaffolds-js/publications.js new file mode 100644 index 0000000000..7e3a996634 --- /dev/null +++ b/tools/static-assets/scaffolds-js/publications.js @@ -0,0 +1,6 @@ +import { Meteor } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); diff --git a/tools/static-assets/scaffolds-ts/collection.ts b/tools/static-assets/scaffolds-ts/collection.ts new file mode 100644 index 0000000000..f579cd71a2 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/collection.ts @@ -0,0 +1,9 @@ +import { Mongo } from 'meteor/mongo'; + +export type $$PascalName$$ = { + _id?: string; + name: string; + createdAt: Date; +} + +export const $$PascalName$$Collection = new Mongo.Collection<$$PascalName$$, $$PascalName$$>('$$name$$'); diff --git a/tools/static-assets/scaffolds-ts/index.ts b/tools/static-assets/scaffolds-ts/index.ts new file mode 100644 index 0000000000..59951d14bb --- /dev/null +++ b/tools/static-assets/scaffolds-ts/index.ts @@ -0,0 +1,3 @@ +export * from './collection'; +export * from './methods'; +export * from './publications'; diff --git a/tools/static-assets/scaffolds-ts/methods.ts b/tools/static-assets/scaffolds-ts/methods.ts new file mode 100644 index 0000000000..d36e1cd42c --- /dev/null +++ b/tools/static-assets/scaffolds-ts/methods.ts @@ -0,0 +1,30 @@ +import { Meteor } from 'meteor/meteor'; +import { Mongo } from 'meteor/mongo'; +import { check } from 'meteor/check'; +import { $$PascalName$$, $$PascalName$$Collection } from './collection'; + +export async function create(data: $$PascalName$$) { + return $$PascalName$$Collection.insertAsync({ ...data }); +} + +export async function update(_id: string, data: Mongo.Modifier<$$PascalName$$>) { + check(_id, String); + return $$PascalName$$Collection.updateAsync(_id, { ...data }); +} + +export async function remove(_id: string) { + check(_id, String); + return $$PascalName$$Collection.removeAsync(_id); +} + +export async function findById(_id: string) { + check(_id, String); + return $$PascalName$$Collection.findOneAsync(_id); +} + +Meteor.methods({ + '$$PascalName$$.create': create, + '$$PascalName$$.update': update, + '$$PascalName$$.remove': remove, + '$$PascalName$$.find': findById +}); diff --git a/tools/static-assets/scaffolds-ts/publications.ts b/tools/static-assets/scaffolds-ts/publications.ts new file mode 100644 index 0000000000..818932bba3 --- /dev/null +++ b/tools/static-assets/scaffolds-ts/publications.ts @@ -0,0 +1,6 @@ +import { Meteor, Subscription } from 'meteor/meteor'; +import { $$PascalName$$Collection } from './collection'; + +Meteor.publish('all$$PascalName$$s', function publish$$PascalName$$s() { + return $$PascalName$$Collection.find({}); +}); diff --git a/tools/static-assets/skel-apollo/.meteor/packages b/tools/static-assets/skel-apollo/.meteor/packages index caa775ee6f..0addfea192 100644 --- a/tools/static-assets/skel-apollo/.meteor/packages +++ b/tools/static-assets/skel-apollo/.meteor/packages @@ -16,7 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page - +~prototype~ static-html # Define static page content in .html files apollo # Basic Apollo integration for Meteor apps swydo:graphql # Import .graphql files diff --git a/tools/static-assets/skel-bare/.meteor/packages b/tools/static-assets/skel-bare/.meteor/packages index 62bedd2c00..294120e852 100644 --- a/tools/static-assets/skel-bare/.meteor/packages +++ b/tools/static-assets/skel-bare/.meteor/packages @@ -10,7 +10,7 @@ mongo # The database Meteor supports right now static-html # Define static page content in .html files reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library - +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode es5-shim # ECMAScript 5 compatibility for older browsers diff --git a/tools/static-assets/skel-blaze/.meteor/packages b/tools/static-assets/skel-blaze/.meteor/packages index c2506a81ed..5e929125ff 100644 --- a/tools/static-assets/skel-blaze/.meteor/packages +++ b/tools/static-assets/skel-blaze/.meteor/packages @@ -19,8 +19,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ hot-module-replacement # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR diff --git a/tools/static-assets/skel-chakra-ui/.meteor/packages b/tools/static-assets/skel-chakra-ui/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-chakra-ui/.meteor/packages +++ b/tools/static-assets/skel-chakra-ui/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-full/.meteor/packages b/tools/static-assets/skel-full/.meteor/packages index 8f6a2ce1df..42dd3fa370 100644 --- a/tools/static-assets/skel-full/.meteor/packages +++ b/tools/static-assets/skel-full/.meteor/packages @@ -11,6 +11,7 @@ blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery reactive-var # Reactive variable for tracker tracker # Meteor's client-side reactive programming library +~prototype~ standard-minifier-css # CSS minifier run for production mode standard-minifier-js # JS minifier run for production mode diff --git a/tools/static-assets/skel-minimal/.meteor/packages b/tools/static-assets/skel-minimal/.meteor/packages index 60ed1976b3..d0998cd7ad 100644 --- a/tools/static-assets/skel-minimal/.meteor/packages +++ b/tools/static-assets/skel-minimal/.meteor/packages @@ -15,3 +15,4 @@ shell-server # Server-side component of the `meteor shell` command webapp # Serves a Meteor app over HTTP server-render # Support for server-side rendering hot-module-replacement # Rebuilds the client if there is a change on the client without restarting the server +~prototype~ diff --git a/tools/static-assets/skel-react/.meteor/packages b/tools/static-assets/skel-react/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-react/.meteor/packages +++ b/tools/static-assets/skel-react/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-solid/.meteor/packages b/tools/static-assets/skel-solid/.meteor/packages index d6c05d244b..492b563f76 100644 --- a/tools/static-assets/skel-solid/.meteor/packages +++ b/tools/static-assets/skel-solid/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files vite:bundler diff --git a/tools/static-assets/skel-svelte/.meteor/packages b/tools/static-assets/skel-svelte/.meteor/packages index 0e3c38c047..6880ea240a 100644 --- a/tools/static-assets/skel-svelte/.meteor/packages +++ b/tools/static-assets/skel-svelte/.meteor/packages @@ -16,8 +16,7 @@ ecmascript # Enable ECMAScript2015+ syntax in app code typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files zodern:melte # Meteor package to allow us to create files with the .svelte extension rdb:svelte-meteor-data # Meteor package which allows us to consume Meteor's reactive data sources inside of our Svelte components diff --git a/tools/static-assets/skel-tailwind/.meteor/packages b/tools/static-assets/skel-tailwind/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-tailwind/.meteor/packages +++ b/tools/static-assets/skel-tailwind/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/.meteor/packages b/tools/static-assets/skel-typescript/.meteor/packages index 72de92e77b..90ce4b06dd 100644 --- a/tools/static-assets/skel-typescript/.meteor/packages +++ b/tools/static-assets/skel-typescript/.meteor/packages @@ -17,7 +17,6 @@ typescript # Enable TypeScript syntax in .ts and .tsx modules shell-server # Server-side component of the `meteor shell` command hot-module-replacement # Update client in development without reloading the page -autopublish # Publish all data to the clients (for prototyping) -insecure # Allow all DB writes from clients (for prototyping) +~prototype~ static-html # Define static page content in .html files react-meteor-data # React higher-order component for reactively tracking Meteor data diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index c7c54d5cc4..76457880f7 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -18,7 +18,7 @@ "@types/mocha": "^8.2.3", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", - "typescript": "^4.6.3" + "typescript": "^4.6.4" }, "meteor": { "mainModule": { diff --git a/tools/static-assets/skel-vue-2/.gitignore b/tools/static-assets/skel-vue-2/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/tools/static-assets/skel-vue-2/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/tools/static-assets/skel-vue-2/.meteor/.gitignore b/tools/static-assets/skel-vue-2/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/static-assets/skel-vue-2/.meteor/packages b/tools/static-assets/skel-vue-2/.meteor/packages new file mode 100644 index 0000000000..83be6b3a62 --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/packages @@ -0,0 +1,24 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-base # Packages every Meteor app needs to have +mobile-experience # Packages for a great mobile UX +mongo # The database Meteor supports right now +reactive-var # Reactive variable for tracker + +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +typescript # Enable TypeScript syntax in .ts and .tsx modules +shell-server # Server-side component of the `meteor shell` command + +tracker # Dependency tracker to allow reactive callbacks +static-html # Define static page content in .html files +akryum:vue-component # Vue-CLI template to publish components + +meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha +johanbrook:publication-collector # Test a Meteor publication by collecting its output diff --git a/tools/static-assets/skel-vue-2/.meteor/platforms b/tools/static-assets/skel-vue-2/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/static-assets/skel-vue-2/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/static-assets/skel-vue-2/client/main.html b/tools/static-assets/skel-vue-2/client/main.html new file mode 100644 index 0000000000..99c3dfb74c --- /dev/null +++ b/tools/static-assets/skel-vue-2/client/main.html @@ -0,0 +1,7 @@ + + ~name~ + + + +
+ diff --git a/tools/static-assets/skel-vue-2/client/main.js b/tools/static-assets/skel-vue-2/client/main.js new file mode 100644 index 0000000000..665c6aa1b1 --- /dev/null +++ b/tools/static-assets/skel-vue-2/client/main.js @@ -0,0 +1,12 @@ +import Vue from 'vue' + +import '../imports/ui/plugins' + +import App from '../imports/ui/App.vue' + +Meteor.startup(() => { + new Vue({ + el: '#app', + ...App, + }) +}) diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.js diff --git a/tools/static-assets/skel-vue/imports/api/collections/Links.tests.js b/tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/collections/Links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/collections/Links.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/fixtures.js b/tools/static-assets/skel-vue-2/imports/api/fixtures.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/fixtures.js rename to tools/static-assets/skel-vue-2/imports/api/fixtures.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js b/tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/createLink.tests.js rename to tools/static-assets/skel-vue-2/imports/api/methods/createLink.tests.js diff --git a/tools/static-assets/skel-vue/imports/api/methods/index.js b/tools/static-assets/skel-vue-2/imports/api/methods/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/methods/index.js rename to tools/static-assets/skel-vue-2/imports/api/methods/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/index.js b/tools/static-assets/skel-vue-2/imports/api/publications/index.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/index.js rename to tools/static-assets/skel-vue-2/imports/api/publications/index.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.js diff --git a/tools/static-assets/skel-vue/imports/api/publications/links.tests.js b/tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js similarity index 100% rename from tools/static-assets/skel-vue/imports/api/publications/links.tests.js rename to tools/static-assets/skel-vue-2/imports/api/publications/links.tests.js diff --git a/tools/static-assets/skel-vue-2/imports/ui/App.vue b/tools/static-assets/skel-vue-2/imports/ui/App.vue new file mode 100644 index 0000000000..e126098ccb --- /dev/null +++ b/tools/static-assets/skel-vue-2/imports/ui/App.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/tools/static-assets/skel-vue/imports/ui/components/Hello.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Hello.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Hello.vue diff --git a/tools/static-assets/skel-vue/imports/ui/components/Info.vue b/tools/static-assets/skel-vue-2/imports/ui/components/Info.vue similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/components/Info.vue rename to tools/static-assets/skel-vue-2/imports/ui/components/Info.vue diff --git a/tools/static-assets/skel-vue/imports/ui/plugins.js b/tools/static-assets/skel-vue-2/imports/ui/plugins.js similarity index 100% rename from tools/static-assets/skel-vue/imports/ui/plugins.js rename to tools/static-assets/skel-vue-2/imports/ui/plugins.js diff --git a/tools/static-assets/skel-vue-2/package.json b/tools/static-assets/skel-vue-2/package.json new file mode 100644 index 0000000000..e8cfe3ee72 --- /dev/null +++ b/tools/static-assets/skel-vue-2/package.json @@ -0,0 +1,23 @@ +{ + "name": "~name~", + "private": true, + "scripts": { + "start": "meteor run", + "test": "meteor test --once --driver-package meteortesting:mocha", + "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", + "visualize": "meteor --production --extra-packages bundle-visualizer" + }, + "dependencies": { + "@babel/runtime": "^7.17.9", + "meteor-node-stubs": "^1.2.1", + "vue": "^2.6.14", + "vue-meteor-tracker": "^2.0.0-beta.5" + }, + "meteor": { + "mainModule": { + "client": "client/main.js", + "server": "server/main.js" + }, + "testModule": "tests/main.js" + } +} diff --git a/tools/static-assets/skel-vue-2/server/main.js b/tools/static-assets/skel-vue-2/server/main.js new file mode 100644 index 0000000000..42950618b6 --- /dev/null +++ b/tools/static-assets/skel-vue-2/server/main.js @@ -0,0 +1,3 @@ +import '../imports/api/fixtures' +import '../imports/api/methods' +import '../imports/api/publications' diff --git a/tools/static-assets/skel-vue-2/tests/main.js b/tools/static-assets/skel-vue-2/tests/main.js new file mode 100644 index 0000000000..6d2a32e09d --- /dev/null +++ b/tools/static-assets/skel-vue-2/tests/main.js @@ -0,0 +1,20 @@ +import assert from "assert"; + +describe("skel", function () { + it("package.json has correct name", async function () { + const { name } = await import("../package.json"); + assert.strictEqual(name, "skel"); + }); + + if (Meteor.isClient) { + it("client is not server", function () { + assert.strictEqual(Meteor.isServer, false); + }); + } + + if (Meteor.isServer) { + it("server is not client", function () { + assert.strictEqual(Meteor.isClient, false); + }); + } +}); diff --git a/tools/static-assets/skel-vue/.meteor/.finished-upgraders b/tools/static-assets/skel-vue/.meteor/.finished-upgraders new file mode 100644 index 0000000000..c07b6ff75a --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.finished-upgraders @@ -0,0 +1,19 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base +1.8.3-split-jquery-from-blaze diff --git a/tools/static-assets/skel-vue/.meteor/.id b/tools/static-assets/skel-vue/.meteor/.id new file mode 100644 index 0000000000..dd363b2513 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +kdvkjcf9nja.gpp7f6ll7w7a diff --git a/tools/static-assets/skel-vue/.meteor/packages b/tools/static-assets/skel-vue/.meteor/packages index 83be6b3a62..2565a5fe32 100644 --- a/tools/static-assets/skel-vue/.meteor/packages +++ b/tools/static-assets/skel-vue/.meteor/packages @@ -4,21 +4,18 @@ # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base # Packages every Meteor app needs to have -mobile-experience # Packages for a great mobile UX -mongo # The database Meteor supports right now -reactive-var # Reactive variable for tracker +meteor-base@1.5.1 # Packages every Meteor app needs to have +mobile-experience@1.1.0 # Packages for a great mobile UX +mongo@1.16.0 # The database Meteor supports right now +reactive-var@1.0.11 # Reactive variable for tracker -standard-minifier-css # CSS minifier run for production mode -standard-minifier-js # JS minifier run for production mode -es5-shim # ECMAScript 5 compatibility for older browsers -ecmascript # Enable ECMAScript2015+ syntax in app code -typescript # Enable TypeScript syntax in .ts and .tsx modules -shell-server # Server-side component of the `meteor shell` command +standard-minifier-css@1.8.2 # CSS minifier run for production mode +standard-minifier-js@2.8.1 # JS minifier run for production mode +es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers +ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code +typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules +shell-server@0.5.0 # Server-side component of the `meteor shell` command +hot-module-replacement@0.5.1 # Update client in development without reloading the page -tracker # Dependency tracker to allow reactive callbacks -static-html # Define static page content in .html files -akryum:vue-component # Vue-CLI template to publish components - -meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha -johanbrook:publication-collector # Test a Meteor publication by collecting its output +static-html@1.3.2 # Define static page content in .html files +vite:bundler diff --git a/tools/static-assets/skel-vue/.meteor/release b/tools/static-assets/skel-vue/.meteor/release new file mode 100644 index 0000000000..1d2a6d0f79 --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/release @@ -0,0 +1 @@ +METEOR@2.8.0 diff --git a/tools/static-assets/skel-vue/.meteor/versions b/tools/static-assets/skel-vue/.meteor/versions new file mode 100644 index 0000000000..3b89f7359b --- /dev/null +++ b/tools/static-assets/skel-vue/.meteor/versions @@ -0,0 +1,71 @@ +allow-deny@1.1.1 +autoupdate@1.8.0 +babel-compiler@7.9.2 +babel-runtime@1.5.1 +base64@1.0.12 +binary-heap@1.0.11 +blaze-tools@1.1.3 +boilerplate-generator@1.7.1 +caching-compiler@1.2.2 +caching-html-compiler@1.2.1 +callback-hook@1.4.0 +check@1.3.1 +ddp@1.4.0 +ddp-client@2.6.0 +ddp-common@1.4.0 +ddp-server@2.6.0 +diff-sequence@1.1.1 +dynamic-import@0.7.2 +ecmascript@0.16.2 +ecmascript-runtime@0.8.0 +ecmascript-runtime-client@0.12.1 +ecmascript-runtime-server@0.11.0 +ejson@1.1.2 +es5-shim@4.8.0 +fetch@0.1.1 +geojson-utils@1.0.10 +hot-code-push@1.0.4 +hot-module-replacement@0.5.1 +html-tools@1.1.3 +htmljs@1.1.1 +id-map@1.1.1 +inter-process-messaging@0.1.1 +launch-screen@1.3.0 +logging@1.3.1 +meteor@1.10.1 +meteor-base@1.5.1 +minifier-css@1.6.1 +minifier-js@2.7.5 +minimongo@1.9.0 +mobile-experience@1.1.0 +mobile-status-bar@1.1.0 +modern-browsers@0.1.8 +modules@0.19.0 +modules-runtime@0.13.0 +modules-runtime-hot@0.14.0 +mongo@1.16.0 +mongo-decimal@0.1.3 +mongo-dev-server@1.1.0 +mongo-id@1.0.8 +npm-mongo@4.9.0 +ordered-dict@1.1.0 +promise@0.12.0 +random@1.2.0 +react-fast-refresh@0.2.3 +reactive-var@1.0.11 +reload@1.3.1 +retry@1.1.0 +routepolicy@1.1.1 +shell-server@0.5.0 +socket-stream-client@0.5.0 +spacebars-compiler@1.3.1 +standard-minifier-css@1.8.2 +standard-minifier-js@2.8.1 +static-html@1.3.2 +templating-tools@1.2.2 +tracker@1.2.0 +typescript@4.5.4 +underscore@1.0.10 +vite:bundler@0.1.9 +webapp@1.13.1 +webapp-hashing@1.1.0 diff --git a/tools/static-assets/skel-vue/README.md b/tools/static-assets/skel-vue/README.md new file mode 100644 index 0000000000..7ba6226cb0 --- /dev/null +++ b/tools/static-assets/skel-vue/README.md @@ -0,0 +1,19 @@ +# Meteor + Vue3 + Vite + +This is a simple example of how to use Vue3 with Meteor. + +## How to use + +1. Clone this repo +2. Run `meteor npm install` +3. Run `meteor` +4. Open `http://localhost:3000` in your browser + +## Libraries used + +- [Vue3](https://v3.vuejs.org/) +- [Vite](https://vitejs.dev/) +- [Vue Router](https://next.router.vuejs.org/) +- [Meteor](https://www.meteor.com/) +- [Vue Meteor Tracker](https://github.com/meteor-vue/vue-meteor-tracker) +- [Tailwind CSS](https://tailwindcss.com/) diff --git a/tools/static-assets/skel-vue/client/main.css b/tools/static-assets/skel-vue/client/main.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/tools/static-assets/skel-vue/client/main.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tools/static-assets/skel-vue/client/main.html b/tools/static-assets/skel-vue/client/main.html index 99c3dfb74c..9e2393399c 100644 --- a/tools/static-assets/skel-vue/client/main.html +++ b/tools/static-assets/skel-vue/client/main.html @@ -1,7 +1,16 @@ ~name~ + + + + + +
diff --git a/tools/static-assets/skel-vue/client/main.js b/tools/static-assets/skel-vue/client/main.js index 665c6aa1b1..97d382a9bd 100644 --- a/tools/static-assets/skel-vue/client/main.js +++ b/tools/static-assets/skel-vue/client/main.js @@ -1,12 +1 @@ -import Vue from 'vue' - -import '../imports/ui/plugins' - -import App from '../imports/ui/App.vue' - -Meteor.startup(() => { - new Vue({ - el: '#app', - ...App, - }) -}) +// main entry point is in imports/ui/main.jsx diff --git a/tools/static-assets/skel-vue/imports/api/links.js b/tools/static-assets/skel-vue/imports/api/links.js new file mode 100644 index 0000000000..4e98fcca62 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/api/links.js @@ -0,0 +1,10 @@ +import { Meteor } from 'meteor/meteor' +import { Mongo } from 'meteor/mongo' + +export const LinksCollection = new Mongo.Collection('links') + +if (Meteor.isServer) { + Meteor.publish('links', function () { + return LinksCollection.find({}) + }) +} diff --git a/tools/static-assets/skel-vue/imports/ui/About.vue b/tools/static-assets/skel-vue/imports/ui/About.vue new file mode 100644 index 0000000000..d1ba384f1b --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/About.vue @@ -0,0 +1,5 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/App.vue b/tools/static-assets/skel-vue/imports/ui/App.vue index e126098ccb..7a775391cb 100644 --- a/tools/static-assets/skel-vue/imports/ui/App.vue +++ b/tools/static-assets/skel-vue/imports/ui/App.vue @@ -1,26 +1,10 @@ - - - - + diff --git a/tools/static-assets/skel-vue/imports/ui/AppMenu.vue b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue new file mode 100644 index 0000000000..5b1997efec --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/AppMenu.vue @@ -0,0 +1,6 @@ + diff --git a/tools/static-assets/skel-vue/imports/ui/Hello.vue b/tools/static-assets/skel-vue/imports/ui/Hello.vue new file mode 100644 index 0000000000..ebe691f4d2 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Hello.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Home.vue b/tools/static-assets/skel-vue/imports/ui/Home.vue new file mode 100644 index 0000000000..0473845661 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Home.vue @@ -0,0 +1,10 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/Info.vue b/tools/static-assets/skel-vue/imports/ui/Info.vue new file mode 100644 index 0000000000..5a17339c53 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/Info.vue @@ -0,0 +1,16 @@ + + + diff --git a/tools/static-assets/skel-vue/imports/ui/main.js b/tools/static-assets/skel-vue/imports/ui/main.js new file mode 100644 index 0000000000..e3500841ea --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/main.js @@ -0,0 +1,13 @@ +import { Meteor } from 'meteor/meteor' +import { createApp } from 'vue' +import { VueMeteor } from 'vue-meteor-tracker' + +import App from './App.vue' +import { router } from './router' + +Meteor.startup(() => { + const app = createApp(App) + app.use(router) + app.use(VueMeteor) + app.mount('#app') +}) diff --git a/tools/static-assets/skel-vue/imports/ui/router.js b/tools/static-assets/skel-vue/imports/ui/router.js new file mode 100644 index 0000000000..7768ef4894 --- /dev/null +++ b/tools/static-assets/skel-vue/imports/ui/router.js @@ -0,0 +1,18 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Home from './Home.vue' + +export const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'home', + component: Home, + }, + { + path: '/about', + name: 'about', + component: () => import('./About.vue'), + }, + ], +}) diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index e8cfe3ee72..f8dc1cace8 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -3,6 +3,7 @@ "private": true, "scripts": { "start": "meteor run", + "build": "meteor build ../output/vue --directory", "test": "meteor test --once --driver-package meteortesting:mocha", "test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", "visualize": "meteor --production --extra-packages bundle-visualizer" @@ -10,8 +11,9 @@ "dependencies": { "@babel/runtime": "^7.17.9", "meteor-node-stubs": "^1.2.1", - "vue": "^2.6.14", - "vue-meteor-tracker": "^2.0.0-beta.5" + "vue": "^3.2.45", + "vue-meteor-tracker": "^3.0.0-beta.7", + "vue-router": "^4.1.6" }, "meteor": { "mainModule": { @@ -19,5 +21,13 @@ "server": "server/main.js" }, "testModule": "tests/main.js" + }, + "devDependencies": { + "@types/meteor": "^2.8.1", + "@vitejs/plugin-vue": "^3.2.0", + "autoprefixer": "^10.4.13", + "postcss": "^8.4.19", + "tailwindcss": "^3.2.4", + "vite": "^3.2.3" } } diff --git a/tools/static-assets/skel-vue/postcss.config.js b/tools/static-assets/skel-vue/postcss.config.js new file mode 100644 index 0000000000..33ad091d26 --- /dev/null +++ b/tools/static-assets/skel-vue/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/tools/static-assets/skel-vue/server/main.js b/tools/static-assets/skel-vue/server/main.js index 42950618b6..44f7bc045b 100644 --- a/tools/static-assets/skel-vue/server/main.js +++ b/tools/static-assets/skel-vue/server/main.js @@ -1,3 +1,31 @@ -import '../imports/api/fixtures' -import '../imports/api/methods' -import '../imports/api/publications' +import { Meteor } from 'meteor/meteor' +import { LinksCollection } from '/imports/api/links' + +async function insertLink({ title, url }) { + await LinksCollection.insertAsync({ title, url, createdAt: new Date() }) +} + +Meteor.startup(async () => { + // If the Links collection is empty, add some data. + if ((await LinksCollection.find().countAsync()) === 0) { + await insertLink({ + title: 'Do the Tutorial', + url: 'https://www.solidjs.com/tutorial/introduction_basics', + }) + + await insertLink({ + title: 'Follow the Guide', + url: 'https://guide.meteor.com', + }) + + await insertLink({ + title: 'Read the Docs', + url: 'https://docs.meteor.com', + }) + + await insertLink({ + title: 'Discussions', + url: 'https://forums.meteor.com', + }) + } +}) diff --git a/tools/static-assets/skel-vue/tailwind.config.js b/tools/static-assets/skel-vue/tailwind.config.js new file mode 100644 index 0000000000..72c950fc84 --- /dev/null +++ b/tools/static-assets/skel-vue/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./imports/ui/**/*.{vue,js,ts,jsx,tsx}', './client/*.html'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/tools/static-assets/skel-vue/tests/main.js b/tools/static-assets/skel-vue/tests/main.js index 6d2a32e09d..086819d896 100644 --- a/tools/static-assets/skel-vue/tests/main.js +++ b/tools/static-assets/skel-vue/tests/main.js @@ -1,20 +1,20 @@ -import assert from "assert"; +import assert from 'assert' -describe("skel", function () { - it("package.json has correct name", async function () { - const { name } = await import("../package.json"); - assert.strictEqual(name, "skel"); - }); +describe('vue-skeleton', function () { + it('package.json has correct name', async function () { + const { name } = await import('../package.json') + assert.strictEqual(name, 'vue-skeleton') + }) if (Meteor.isClient) { - it("client is not server", function () { - assert.strictEqual(Meteor.isServer, false); - }); + it('client is not server', function () { + assert.strictEqual(Meteor.isServer, false) + }) } if (Meteor.isServer) { - it("server is not client", function () { - assert.strictEqual(Meteor.isClient, false); - }); + it('server is not client', function () { + assert.strictEqual(Meteor.isClient, false) + }) } -}); +}) diff --git a/tools/static-assets/skel-vue/vite.config.js b/tools/static-assets/skel-vue/vite.config.js new file mode 100644 index 0000000000..d3aeaa9aba --- /dev/null +++ b/tools/static-assets/skel-vue/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + meteor: { + clientEntry: 'imports/ui/main.js', + }, + optimizeDeps: { + exclude: ['vue-meteor-tracker'], + }, +}) diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 234b36f9bc..88e1ef394b 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -29,6 +29,7 @@ "exclude": [ "./tests/apps/**", "./tests/packages/**", - "./static-assets/skel*/**" + "./static-assets/skel*/**", + "./static-assets/scaffolds*/**", ] } From 8cd32724a0ac6ca30468f50a6cab4e17deca0071 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 15:37:55 -0400 Subject: [PATCH 278/292] new meteor-babel version --- npm-packages/meteor-babel/options.js | 14 +++++++------- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index dc215572b8..93bb21b905 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,13 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - if (!process.env.DISABLE_FIBERS) { - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); - } + + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: !process.env.DISABLE_FIBERS, + isFiberDisabled: process.env.DISABLE_FIBERS, + }]); // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 6733ac41b8..43b6909636 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.2-beta.0", + "version": "7.18.0-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c1745ba2f9..c0872399eb 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (! node.async) { + if (!node.async || this.opts.isFiberDisabled) { return; } From 2e8d66f5386e58281d0244ee4d0e7fd8cb667367 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 15:37:55 -0400 Subject: [PATCH 279/292] new meteor-babel version --- npm-packages/meteor-babel/options.js | 14 +++++++------- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index dc215572b8..93bb21b905 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,13 +185,13 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - if (!process.env.DISABLE_FIBERS) { - combined.plugins.push([require("./plugins/async-await.js"), { - // Do not transform `await x` to `Promise.await(x)`, since Node - // 8 has native support for await expressions. - useNativeAsyncAwait: false - }]); - } + + combined.plugins.push([require("./plugins/async-await.js"), { + // Do not transform `await x` to `Promise.await(x)`, since Node + // 8 has native support for await expressions. + useNativeAsyncAwait: !process.env.DISABLE_FIBERS, + isFiberDisabled: process.env.DISABLE_FIBERS, + }]); // Enable async generator functions proposal. combined.plugins.push(require("@babel/plugin-proposal-async-generator-functions")); diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 6733ac41b8..43b6909636 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.17.2-beta.0", + "version": "7.18.0-beta.0", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c1745ba2f9..c0872399eb 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (! node.async) { + if (!node.async || this.opts.isFiberDisabled) { return; } From 59792cdc77293f24f9a424950792f67b694edcec Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:02:18 -0300 Subject: [PATCH 280/292] chore: update dev-bundle tools --- scripts/dev-bundle-tool-package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c265734f8a..1b5d8b5244 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.17.2-beta.0", + "@meteorjs/babel": "7.18.0-beta.0", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 89f11a117f93c4920346d1a3c4b813b1ecdaa755 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:03:02 -0300 Subject: [PATCH 281/292] Meteor bundle version to 14.21.1.3 :commet: --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index e1379039a5..f4be9ae253 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.2 +BUNDLE_VERSION=14.21.1.3 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 061c7b4411a9dccbb45da3022118fbf226fe7f15 Mon Sep 17 00:00:00 2001 From: denihs Date: Mon, 12 Dec 2022 16:53:30 -0400 Subject: [PATCH 282/292] new meteor-babel version --- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 43b6909636..f3b5642e8a 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.0", + "version": "7.18.0-beta.1", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c0872399eb..2d1de3e9e1 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || this.opts.isFiberDisabled) { + if (!node.async || !this.opts.isFiberDisabled) { return; } diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 1b5d8b5244..9fb98228b9 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.0", + "@meteorjs/babel": "7.18.0-beta.1", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 8135c82bd6aaa6cfde77cee560a48fd4696c53d6 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 17:55:12 -0300 Subject: [PATCH 283/292] chore: updated bundle version --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index f4be9ae253..be2307e734 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.3 +BUNDLE_VERSION=14.21.1.4 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From cf0b2bb6286debb48cf7b9b94a544d50a941c041 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:02:14 -0300 Subject: [PATCH 284/292] docs: adjusted missing ponctuation in docs --- docs/history.md | 79 ++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/docs/history.md b/docs/history.md index 346edbfca1..7386b9d1e3 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,42 +1,53 @@ -## 2.9, 2022-XX-XX +## v2.9, 2022-12-12 ### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) -* Create Email.sendAsync method without using Fibers[PR](https://github.com/meteor/meteor/pull/12101) .by [edimarlnx](https://github.com/edimarlnx) -* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) by [edimarlnx](https://github.com/edimarlnx) -* Change Accounts and Oauth to use Async methods[PR](https://github.com/meteor/meteor/pull/12156). by [edimarlnx](https://github.com/edimarlnx) -* TinyTest package without Future[PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo) -* Feat user accounts base async[PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27) -* Move some OAuth of out of accounts-base[PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ) -* Feat: not using insecure & autopublish[PR](https://github.com/meteor/meteor/pull/12220 by default by [Grubba27](https://github.com/Grubba27) -* Don't apply babel async-await plugin when not running on Fibers[PR](https://github.com/meteor/meteor/pull/12221). by [matheusccastroo](https://github.com/matheusccastroo) -* Implemented Fibers-less MongoDB count methods[PR](https://github.com/meteor/meteor/pull/12295). by [radekmie](https://github.com/radekmie) -* (feat): Generate scaffold in cli[PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27) -* Update types[PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech) -* [package-version-parser] Remove underscore[PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel) -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27) -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert) +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* Create Email.sendAsync method without using Fibers [PR](https://github.com/meteor/meteor/pull/12101) + by [edimarlnx](https://github.com/edimarlnx). +* Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) + by [edimarlnx](https://github.com/edimarlnx). +* Change Accounts and Oauth to use Async methods [PR](https://github.com/meteor/meteor/pull/12156) + by [edimarlnx](https://github.com/edimarlnx). +* TinyTest package without Future [PR](https://github.com/meteor/meteor/pull/12222) + by [matheusccastroo](https://github.com/matheusccastroo). +* Feat user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) + by [Grubba27](https://github.com/Grubba27). +* Move some OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) + by [StorytellerCZ](https://github.com/StorytellerCZ). +* Feat: not using insecure & autopublish [PR](https://github.com/meteor/meteor/pull/12220) + by [Grubba27](https://github.com/Grubba27). +* Don't apply babel async-await plugin when not running on Fibers [PR](https://github.com/meteor/meteor/pull/12221). + by [matheusccastroo](https://github.com/matheusccastroo). +* Implemented Fibers-less MongoDB count methods [PR](https://github.com/meteor/meteor/pull/12295) + by [radekmie](https://github.com/radekmie). +* (feat): Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) + by [Grubba27](https://github.com/Grubba27). +* Update types [PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech). +* [package-version-parser] Remove underscore [PR](https://github.com/meteor/meteor/pull/12248) + by [harryadel](https://github.com/harryadel). +* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). +* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) + by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth` - +* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth`. #### Migration Steps #### Meteor Version Release * `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel + - updated Typescript deps and meteor babel. * `eslint-plugin-meteor@7.4.0`: - - updated Typescript deps and meteor babel + - updated Typescript deps and meteor babel. * `accounts-base@2.2.6` - Moved some functions to accounts-oauth. * `accounts-oauth@1.4.2` - Received functions from accounts-base. * `accounts-password@2.3.2` - - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync` + - Asyncfied functions such as `changePassword`, `forgotPassword`, `resetPassword`, `verifyEmail`, `setPasswordAsync`. * `babel-compiler@7.10.1` - Updated babel to 7.17.1. * `email@2.2.3` @@ -78,7 +89,7 @@ * `test-in-browser@1.3.2` - Adjusted e[type] to e.type * `tinytest@1.2.2` - - TinyTest package without Future + - TinyTest package without Future. * `twitter-oauth@1.3.2` - Asyncfied methods. * `typescript@4.6.4` @@ -87,14 +98,14 @@ - Asyncfied methods. #### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@edimarlnx](https://github.com/edimarlnx) -- [@matheusccastroo](https://github.com/matheusccastroo) -- [@Grubba27](https://github.com/Grubba27) -- [@StorytellerCZ](https://github.com/StorytellerCZ) -- [@radekmie](https://github.com/radekmie) -- [@piotrpospiech](https://github.com/piotrpospiech) -- [@harryadel](https://github.com/harryadel) +- [@henriquealbert](https://github.com/henriquealbert); +- [@edimarlnx](https://github.com/edimarlnx); +- [@matheusccastroo](https://github.com/matheusccastroo); +- [@Grubba27](https://github.com/Grubba27); +- [@StorytellerCZ](https://github.com/StorytellerCZ); +- [@radekmie](https://github.com/radekmie); +- [@piotrpospiech](https://github.com/piotrpospiech); +- [@harryadel](https://github.com/harryadel); For making this great framework even better! @@ -106,7 +117,7 @@ For making this great framework even better! - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). * `meteorjs/babel@7.16.1-beta.0` - Adjusted config to Auto import React on jsx,tsx files [PR](https://github.com/meteor/meteor/pull/12327). - - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0 + - needs to use directly from npm the meteorjs/babel@7.16.1-beta.0. #### Breaking Changes N/A @@ -118,14 +129,14 @@ N/A - Make count NOT create a cursor. [PR](https://github.com/meteor/meteor/pull/12326). #### Special thanks to -- [@henriquealbert](https://github.com/henriquealbert) -- [@znewsham](https://github.com/znewsham) +- [@henriquealbert](https://github.com/henriquealbert); +- [@znewsham](https://github.com/znewsham); For making this great framework even better! -## 2.8.1, 2022-11-14 +## v2.8.1, 2022-11-14 #### Highlights From 9982d2c74f8a4cb266f32d890d74e2fe409a8923 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:04:41 -0300 Subject: [PATCH 285/292] docs: updated migration steps --- docs/history.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index 7386b9d1e3..e5922dba2b 100644 --- a/docs/history.md +++ b/docs/history.md @@ -2,7 +2,7 @@ ### Highlights -* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) +* TypeScript update to v4.6.4 [PR](https://github.com/meteor/meteor/pull/12204) by [@StorytellerCZ](https://github.com/StorytellerCZ). * Create Email.sendAsync method without using Fibers [PR](https://github.com/meteor/meteor/pull/12101) by [edimarlnx](https://github.com/edimarlnx). * Create async method CssTools.minifyCssAsync [PR](https://github.com/meteor/meteor/pull/12105) @@ -36,6 +36,8 @@ #### Migration Steps +You can follow in [here](https://guide.meteor.com/2.9-migration.html). + #### Meteor Version Release * `eslint-plugin-meteor@7.4.0`: From 3eb377057b251448957081e77d21600e619aecfc Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Mon, 12 Dec 2022 18:08:54 -0300 Subject: [PATCH 286/292] Docs: updated pr titles to more semantics --- docs/history.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/history.md b/docs/history.md index e5922dba2b..cf797a4e59 100644 --- a/docs/history.md +++ b/docs/history.md @@ -11,9 +11,9 @@ by [edimarlnx](https://github.com/edimarlnx). * TinyTest package without Future [PR](https://github.com/meteor/meteor/pull/12222) by [matheusccastroo](https://github.com/matheusccastroo). -* Feat user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) +* Feat: user accounts base async [PR](https://github.com/meteor/meteor/pull/12274) by [Grubba27](https://github.com/Grubba27). -* Move some OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) +* Move somed methods from OAuth of out of accounts-base [PR](https://github.com/meteor/meteor/pull/12202) by [StorytellerCZ](https://github.com/StorytellerCZ). * Feat: not using insecure & autopublish [PR](https://github.com/meteor/meteor/pull/12220) by [Grubba27](https://github.com/Grubba27). @@ -21,13 +21,13 @@ by [matheusccastroo](https://github.com/matheusccastroo). * Implemented Fibers-less MongoDB count methods [PR](https://github.com/meteor/meteor/pull/12295) by [radekmie](https://github.com/radekmie). -* (feat): Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) +* Feat: Generate scaffold in cli [PR](https://github.com/meteor/meteor/pull/12298) by [Grubba27](https://github.com/Grubba27). * Update types [PR](https://github.com/meteor/meteor/pull/12306) by [piotrpospiech](https://github.com/piotrpospiech). -* [package-version-parser] Remove underscore [PR](https://github.com/meteor/meteor/pull/12248) +* Remove underscore from package-version-parser [PR](https://github.com/meteor/meteor/pull/12248) by [harryadel](https://github.com/harryadel). -* updated mongo [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). -* feat: vue3-skel [PR](https://github.com/meteor/meteor/pull/12302) +* Update MongoDB driver version [PR](https://github.com/meteor/meteor/pull/12333) by [Grubba27](https://github.com/Grubba27). +* New Vue3 Skeleton [PR](https://github.com/meteor/meteor/pull/12302) by [henriquealbert](https://github.com/henriquealbert). #### Breaking Changes From 104ae8c6ee0e6d7327d205e6a1a0e8390a9b2716 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 16:58:20 -0300 Subject: [PATCH 287/292] chore: updated _config.yml --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_config.yml b/docs/_config.yml index 7a70499147..1bd31f0460 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,6 +1,7 @@ title: Meteor API Docs subtitle: API Docs versions: + - '2.9' - '2.8' - '2.7' - '2.6' From 647b9646bfc8584a8d497e7461c0efe92f82236e Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Tue, 13 Dec 2022 17:58:50 -0300 Subject: [PATCH 288/292] docs: updated breaking changes for more clarity --- docs/history.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index cf797a4e59..cf90d38dde 100644 --- a/docs/history.md +++ b/docs/history.md @@ -32,7 +32,8 @@ #### Breaking Changes -* Most of OAuth related code has been moved from `accounts-base` to `accounts-oauth`. +* OAuth related code has been moved from `accounts-base` to `accounts-oauth`, removing the dependency on `service-configuration` +more can be seen in this [discussion](https://github.com/meteor/meteor/discussions/12171) and in the [PR](https://github.com/meteor/meteor/pull/12202). #### Migration Steps From 7d2de151539ba31e8e6233238ec85c5a46edbea8 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 12:19:11 -0300 Subject: [PATCH 289/292] chore: update dev bundle --- meteor | 2 +- npm-packages/meteor-babel/options.js | 6 +++--- npm-packages/meteor-babel/package.json | 2 +- npm-packages/meteor-babel/plugins/async-await.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/meteor b/meteor index be2307e734..7003b348c5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.4 +BUNDLE_VERSION=14.21.1.5 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 93bb21b905..6816d68179 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -185,12 +185,12 @@ function getDefaultsForNode8(features) { // Ensure that async functions run in a Fiber, while also taking // full advantage of native async/await support in Node 8. - + const isFiberDisabled = process.env.DISABLE_FIBERS || false; combined.plugins.push([require("./plugins/async-await.js"), { // Do not transform `await x` to `Promise.await(x)`, since Node // 8 has native support for await expressions. - useNativeAsyncAwait: !process.env.DISABLE_FIBERS, - isFiberDisabled: process.env.DISABLE_FIBERS, + useNativeAsyncAwait: !isFiberDisabled, + isFiberDisabled: isFiberDisabled, }]); // Enable async generator functions proposal. diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index f3b5642e8a..61c50ee1d5 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.1", + "version": "7.18.0-beta.2", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index 2d1de3e9e1..c0872399eb 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,7 +9,7 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || !this.opts.isFiberDisabled) { + if (!node.async || this.opts.isFiberDisabled) { return; } diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 9fb98228b9..03fe5abf53 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.1", + "@meteorjs/babel": "7.18.0-beta.2", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 61fa84efc768b91cc83ab200a168f39c0d61a5c1 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 14 Dec 2022 14:43:47 -0400 Subject: [PATCH 290/292] new meteor-babel version --- npm-packages/meteor-babel/options.js | 1 + npm-packages/meteor-babel/package.json | 2 +- .../meteor-babel/plugins/async-await.js | 17 ++++++++++++----- scripts/dev-bundle-tool-package.js | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/npm-packages/meteor-babel/options.js b/npm-packages/meteor-babel/options.js index 6816d68179..e1287b8ca5 100644 --- a/npm-packages/meteor-babel/options.js +++ b/npm-packages/meteor-babel/options.js @@ -191,6 +191,7 @@ function getDefaultsForNode8(features) { // 8 has native support for await expressions. useNativeAsyncAwait: !isFiberDisabled, isFiberDisabled: isFiberDisabled, + overwriteFiberExit: process.env.OVERWRITE_FIBERS_EXIT === '1', }]); // Enable async generator functions proposal. diff --git a/npm-packages/meteor-babel/package.json b/npm-packages/meteor-babel/package.json index 61c50ee1d5..cb7a5fb0ed 100644 --- a/npm-packages/meteor-babel/package.json +++ b/npm-packages/meteor-babel/package.json @@ -1,7 +1,7 @@ { "name": "@meteorjs/babel", "author": "Meteor ", - "version": "7.18.0-beta.2", + "version": "7.18.0-beta.3", "license": "MIT", "description": "Babel wrapper package for use with Meteor", "keywords": [ diff --git a/npm-packages/meteor-babel/plugins/async-await.js b/npm-packages/meteor-babel/plugins/async-await.js index c0872399eb..38abbff65f 100644 --- a/npm-packages/meteor-babel/plugins/async-await.js +++ b/npm-packages/meteor-babel/plugins/async-await.js @@ -9,14 +9,10 @@ module.exports = function (babel) { Function: { exit: function (path) { const node = path.node; - if (!node.async || this.opts.isFiberDisabled) { + if (!node.async) { return; } - // The original function becomes a non-async function that - // returns a Promise. - node.async = false; - // The inner function should inherit lexical environment items // like `this`, `super`, and `arguments` from the outer // function, and arrow functions provide exactly that behavior. @@ -30,6 +26,17 @@ module.exports = function (babel) { !! this.opts.useNativeAsyncAwait ); + if (this.opts.isFiberDisabled && this.opts.overwriteFiberExit) { + if (node.type === "ArrowFunctionExpression") { + node.body = innerFn; + } + return; + } + + // The original function becomes a non-async function that + // returns a Promise. + node.async = false; + const promiseResultExpression = t.callExpression( t.memberExpression( t.identifier("Promise"), diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 03fe5abf53..d053cff797 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,7 +15,7 @@ var packageJson = { "node-gyp": "8.0.0", "node-pre-gyp": "0.15.0", typescript: "4.5.4", - "@meteorjs/babel": "7.18.0-beta.2", + "@meteorjs/babel": "7.18.0-beta.3", // Keep the versions of these packages consistent with the versions // found in dev-bundle-server-package.js. "meteor-promise": "0.9.0", From 6d24edca5dab36d705e5892a64eee73af770ba61 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 14 Dec 2022 15:46:07 -0300 Subject: [PATCH 291/292] feat: new dev bundle :commet: --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 7003b348c5..dadfa87b20 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=14.21.1.5 +BUNDLE_VERSION=14.21.1.6 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 6b61f03d9f5732c32b83fc0b1b077316e6ad5066 Mon Sep 17 00:00:00 2001 From: denihs Date: Wed, 14 Dec 2022 16:15:05 -0400 Subject: [PATCH 292/292] Fixing ddp-server tests --- packages/ddp-server/livedata_server_async_tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ddp-server/livedata_server_async_tests.js b/packages/ddp-server/livedata_server_async_tests.js index c2ca9fcdee..e326a59a0a 100644 --- a/packages/ddp-server/livedata_server_async_tests.js +++ b/packages/ddp-server/livedata_server_async_tests.js @@ -166,8 +166,8 @@ Tinytest.addAsync('livedata server - async publish cursor', function( const remoteCollection = new Mongo.Collection('names', { connection: clientConn, }); - clientConn.subscribe('asyncPublishCursor', () => { - const actual = remoteCollection.find().fetch(); + clientConn.subscribe('asyncPublishCursor', async () => { + const actual = await remoteCollection.find().fetch(); test.equal(actual[0].name, 'async'); onComplete(); });