From b1efc41b26651f84d137937428ef60e87261426c Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Tue, 29 Oct 2019 10:48:26 +0800 Subject: [PATCH 01/43] Update all meteor version and packages and npm packages Some meteor packages still need to be updated, like aldeed:collection2, but can cause problems. --- .meteor/.finished-upgraders | 1 + .meteor/packages | 22 +- .meteor/release | 2 +- .meteor/versions | 98 +- .vscode/typings/meteor.d.ts | 2013 ++++++++++++++++++++++++ package-lock.json | 2875 +++++++++++++++++------------------ package.json | 32 +- 7 files changed, 3461 insertions(+), 1582 deletions(-) create mode 100644 .vscode/typings/meteor.d.ts diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders index 910574ce..4538749a 100644 --- a/.meteor/.finished-upgraders +++ b/.meteor/.finished-upgraders @@ -15,3 +15,4 @@ notices-for-facebook-graph-api-2 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 diff --git a/.meteor/packages b/.meteor/packages index a6929a56..44b214f3 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -5,11 +5,11 @@ # but you can also edit it by hand. # meteor libraries -meteor-base@1.3.0 -ecmascript@0.10.6 -es5-shim@4.7.0 -check@1.3.0 -tracker@1.1.3 +meteor-base@1.4.0 +ecmascript@0.12.4 +es5-shim@4.8.0 +check@1.3.1 +tracker@1.2.0 # standard libraries jquery@1.11.10 @@ -21,7 +21,7 @@ static-html@1.1.12_1 react-meteor-data # data -mongo@1.4.2 +mongo@1.6.2 aldeed:simple-schema aldeed:collection2 dburles:collection-helpers @@ -33,7 +33,7 @@ mdg:validation-error universe:i18n # accounts -accounts-password@1.5.0 +accounts-password@1.5.1 # mobile crosswalk@1.7.1 @@ -42,7 +42,7 @@ chriswessels:hammer # production juliancwirko:postcss@1.0.0-beta.11 -standard-minifier-js@2.3.1 +standard-minifier-js@2.4.1 ddp-rate-limiter@1.0.7 app-prod-security @@ -59,9 +59,9 @@ practicalmeteor:mocha practicalmeteor:chai practicalmeteor:sinon hwillson:stub-collections -shell-server@0.3.1 +shell-server@0.4.0 # security audit-argument-checks@1.0.7 -dynamic-import@0.3.0 -reactive-var +dynamic-import@0.5.1 +reactive-var@1.0.11 diff --git a/.meteor/release b/.meteor/release index 011385b2..97064e19 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.6.1.1 +METEOR@1.8.1 diff --git a/.meteor/versions b/.meteor/versions index 012c52e0..c0b92513 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,4 +1,4 @@ -accounts-base@1.4.2 +accounts-base@1.4.4 accounts-password@1.5.1 aldeed:collection2@2.10.0 aldeed:collection2-core@1.2.0 @@ -8,20 +8,20 @@ aldeed:simple-schema@1.5.4 allow-deny@1.1.0 app-prod-security@0.0.0 audit-argument-checks@1.0.7 -autoupdate@1.4.0 -babel-compiler@7.0.7 -babel-runtime@1.2.2 -base64@1.0.11 -binary-heap@1.0.10 -blaze@2.3.2 +autoupdate@1.6.0 +babel-compiler@7.3.4 +babel-runtime@1.3.0 +base64@1.0.12 +binary-heap@1.0.11 +blaze@2.3.3 blaze-tools@1.0.10 -boilerplate-generator@1.4.0 +boilerplate-generator@1.6.0 browser-policy@1.1.0 browser-policy-common@1.0.11 browser-policy-content@1.1.0 browser-policy-framing@1.1.0 -caching-compiler@1.1.11 -caching-html-compiler@1.1.2 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 callback-hook@1.1.0 check@1.3.1 chriswessels:hammer@4.0.2 @@ -29,55 +29,58 @@ coffeescript@1.0.17 crosswalk@1.7.1 dburles:collection-helpers@1.1.0 ddp@1.4.0 -ddp-client@2.3.2 +ddp-client@2.3.3 ddp-common@1.4.0 ddp-rate-limiter@1.0.7 -ddp-server@2.1.2 +ddp-server@2.3.0 deps@1.0.12 -diff-sequence@1.1.0 +diff-sequence@1.1.1 dispatch:mocha-phantomjs@0.1.9 dispatch:phantomjs-tests@0.0.7 -dynamic-import@0.3.0 -ecmascript@0.10.7 -ecmascript-runtime@0.5.0 -ecmascript-runtime-client@0.6.2 -ecmascript-runtime-server@0.5.0 +dynamic-import@0.5.1 +ecmascript@0.12.7 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0 +ecmascript-runtime-server@0.7.1 ejson@1.1.0 email@1.2.3 -es5-shim@4.7.3 +es5-shim@4.8.0 factory@1.0.0 +fetch@0.1.1 force-ssl@1.1.0 force-ssl-common@1.1.0 geojson-utils@1.0.10 hot-code-push@1.0.4 html-tools@1.0.11 htmljs@1.0.11 -http@1.4.1 -hwillson:stub-collections@1.0.8 +hwillson:stub-collections@1.0.9 id-map@1.1.0 +inter-process-messaging@0.1.0 jquery@1.11.11 juliancwirko:postcss@1.3.0 launch-screen@1.1.1 -less@2.7.12 +less@2.8.0 livedata@1.0.18 localstorage@1.2.0 logging@1.1.20 -mdg:validated-method@1.1.0 +mdg:validated-method@1.2.0 mdg:validation-error@0.5.1 -meteor@1.8.6 -meteor-base@1.3.0 -minifier-css@1.3.1 -minifier-js@2.3.4 -minimongo@1.4.4 +meteor@1.9.3 +meteor-base@1.4.0 +minifier-css@1.4.2 +minifier-js@2.4.1 +minimongo@1.4.5 mobile-experience@1.0.5 mobile-status-bar@1.0.14 -modules@0.11.6 -modules-runtime@0.9.2 -mongo@1.4.7 +modern-browsers@0.1.4 +modules@0.13.0 +modules-runtime@0.10.3 +mongo@1.6.3 +mongo-decimal@0.1.1 mongo-dev-server@1.1.0 mongo-id@1.0.7 npm-bcrypt@0.9.3 -npm-mongo@2.2.34 +npm-mongo@3.1.2 observe-sequence@1.0.16 ordered-dict@1.1.0 practicalmeteor:chai@2.1.0_1 @@ -85,44 +88,41 @@ practicalmeteor:loglevel@1.2.0_2 practicalmeteor:mocha@2.4.5_6 practicalmeteor:mocha-core@1.0.1 practicalmeteor:sinon@1.14.1_2 -promise@0.10.2 +promise@0.11.2 publication-collector@0.0.1 raix:eventemitter@0.1.3 random@1.1.0 rate-limit@1.0.9 react-meteor-data@0.2.16 reactive-var@1.0.11 -reload@1.2.0 +reload@1.3.0 retry@1.1.0 -reywood:publish-composite@1.6.0 -routepolicy@1.0.13 -server-render@0.3.0 +reywood:publish-composite@1.7.2 +routepolicy@1.1.0 service-configuration@1.0.11 sha@1.0.9 -shell-server@0.3.1 -shim-common@0.1.0 +shell-server@0.4.0 simple:authenticate-user-by-token@1.0.1 simple:json-routes@2.1.0 simple:rest@1.1.1 simple:rest-accounts-password@1.1.2 simple:rest-bearer-token-parser@1.0.1 simple:rest-json-error-handler@1.0.1 -socket-stream-client@0.1.0 +socket-stream-client@0.2.2 spacebars@1.0.15 spacebars-compiler@1.1.3 -srp@1.0.10 -standard-minifier-js@2.3.3 +srp@1.0.12 +standard-minifier-js@2.4.1 static-html@1.2.2 -templating@1.2.15 -templating-compiler@1.2.15 -templating-runtime@1.2.15 +templating@1.3.2 +templating-compiler@1.3.3 +templating-runtime@1.3.2 templating-tools@1.1.2 tmeasday:check-npm-versions@0.3.2 tmeasday:test-reporter-helpers@0.2.1 -tracker@1.1.3 +tracker@1.2.0 underscore@1.0.10 -universe:i18n@1.16.0 -url@1.2.0 -webapp@1.5.0 +universe:i18n@1.30.0 +webapp@1.7.4 webapp-hashing@1.0.9 xolvio:cleaner@0.3.3 diff --git a/.vscode/typings/meteor.d.ts b/.vscode/typings/meteor.d.ts new file mode 100644 index 00000000..9bb7d02e --- /dev/null +++ b/.vscode/typings/meteor.d.ts @@ -0,0 +1,2013 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/meteor-typings/meteor/241d0e5335025e64fc3ea064de80a026a08f3f06/1.3/header.d.ts + +// Generated by typings +// Source: https://raw.githubusercontent.com/meteor-typings/meteor/241d0e5335025e64fc3ea064de80a026a08f3f06/1.3/main.d.ts +declare module Accounts { + function user(): Meteor.User; + + function userId(): string; + + function createUser(options: { + username ? : string; + email ? : string; + password ? : string; + profile ? : Object; + }, callback ? : Function): string; + + function config(options: { + sendVerificationEmail ? : boolean; + forbidClientAccountCreation ? : boolean; + restrictCreationByEmailDomain ? : string | Function; + loginExpirationInDays ? : number; + oauthSecretKey ? : string; + }): void; + + function onLogin(func: Function): { + stop: () => void + }; + + function onLoginFailure(func: Function): { + stop: () => void + }; + + function loginServicesConfigured(): boolean; + + function onPageLoadLogin(func: Function): void; +} + +declare module "meteor/accounts-base" { + /// + + module Accounts { + function user(): Meteor.User; + + function userId(): string; + + function createUser(options: { + username ? : string; + email ? : string; + password ? : string; + profile ? : Object; + }, callback ? : Function): string; + + function config(options: { + sendVerificationEmail ? : boolean; + forbidClientAccountCreation ? : boolean; + restrictCreationByEmailDomain ? : string | Function; + loginExpirationInDays ? : number; + oauthSecretKey ? : string; + }): void; + + function onLogin(func: Function): { + stop: () => void + }; + + function onLoginFailure(func: Function): { + stop: () => void + }; + + function loginServicesConfigured(): boolean; + + function onPageLoadLogin(func: Function): void; + } +} +declare module Accounts { + function changePassword(oldPassword: string, newPassword: string, callback ? : Function): void; + + function forgotPassword(options: { + email ? : string; + }, callback ? : Function): void; + + function resetPassword(token: string, newPassword: string, callback ? : Function): void; + + function verifyEmail(token: string, callback ? : Function): void; + + function onEmailVerificationLink(callback: Function): void; + + function onEnrollmentLink(callback: Function): void; + + function onResetPasswordLink(callback: Function): void; + + function loggingIn(): boolean; + + function logout(callback ? : Function): void; + + function logoutOtherClients(callback ? : Function): void; + + var ui: { + config(options: { + requestPermissions ? : Object; + requestOfflineToken ? : Object; + forceApprovalPrompt ? : Object; + passwordSignupFields ? : string; + }): void; + }; +} + +declare module "meteor/accounts-base" { + module Accounts { + function changePassword(oldPassword: string, newPassword: string, callback ? : Function): void; + + function forgotPassword(options: { + email ? : string; + }, callback ? : Function): void; + + function resetPassword(token: string, newPassword: string, callback ? : Function): void; + + function verifyEmail(token: string, callback ? : Function): void; + + function onEmailVerificationLink(callback: Function): void; + + function onEnrollmentLink(callback: Function): void; + + function onResetPasswordLink(callback: Function): void; + + function loggingIn(): boolean; + + function logout(callback ? : Function): void; + + function logoutOtherClients(callback ? : Function): void; + + var ui: { + config(options: { + requestPermissions ? : Object; + requestOfflineToken ? : Object; + forceApprovalPrompt ? : Object; + passwordSignupFields ? : string; + }): void; + }; + } +} + +interface EmailFields { + from ? : () => string; + subject ? : (user: Meteor.User) => string; + text ? : (user: Meteor.User, url: string) => string; + html ? : (user: Meteor.User, url: string) => string; +} + +interface Header { + [id: string]: string; +} + +interface EmailTemplates { + from: string; + siteName: string; + headers ? : Header; + resetPassword: EmailFields; + enrollAccount: EmailFields; + verifyEmail: EmailFields; +} + +declare module Accounts { + var emailTemplates: EmailTemplates; + + function addEmail(userId: string, newEmail: string, verified ? : boolean): void; + + function removeEmail(userId: string, email: string): void; + + function onCreateUser(func: Function): void; + + function findUserByEmail(email: string): Object; + + function findUserByUsername(username: string): Object; + + function sendEnrollmentEmail(userId: string, email ? : string): void; + + function sendResetPasswordEmail(userId: string, email ? : string): void; + + function sendVerificationEmail(userId: string, email ? : string): void; + + function setUsername(userId: string, newUsername: string): void; + + function setPassword(userId: string, newPassword: string, options ? : { + logout ? : Object; + }): void; + + function validateNewUser(func: Function): boolean; + + function validateLoginAttempt(func: Function): { + stop: () => void + }; + + interface IValidateLoginAttemptCbOpts { + type: string; + allowed: boolean; + error: Meteor.Error; + user: Meteor.User; + connection: Meteor.Connection; + methodName: string; + methodArguments: any[]; + } +} + +declare module "meteor/accounts-base" { + /// + /// + + interface EmailFields { + from ? : () => string; + subject ? : (user: Meteor.User) => string; + text ? : (user: Meteor.User, url: string) => string; + html ? : (user: Meteor.User, url: string) => string; + } + + interface Header { + [id: string]: string; + } + + interface EmailTemplates { + from: string; + siteName: string; + headers ? : Header; + resetPassword: EmailFields; + enrollAccount: EmailFields; + verifyEmail: EmailFields; + } + + module Accounts { + var emailTemplates: EmailTemplates; + + function addEmail(userId: string, newEmail: string, verified ? : boolean): void; + + function removeEmail(userId: string, email: string): void; + + function onCreateUser(func: Function): void; + + function findUserByEmail(email: string): Object; + + function findUserByUsername(username: string): Object; + + function sendEnrollmentEmail(userId: string, email ? : string): void; + + function sendResetPasswordEmail(userId: string, email ? : string): void; + + function sendVerificationEmail(userId: string, email ? : string): void; + + function setUsername(userId: string, newUsername: string): void; + + function setPassword(userId: string, newPassword: string, options ? : { + logout ? : Object; + }): void; + + function validateNewUser(func: Function): boolean; + + function validateLoginAttempt(func: Function): { + stop: () => void + }; + + interface IValidateLoginAttemptCbOpts { + type: string; + allowed: boolean; + error: Meteor.Error; + user: Meteor.User; + connection: Meteor.Connection; + methodName: string; + methodArguments: any[]; + } + } +} + +declare module Blaze { + var View: ViewStatic; + + interface ViewStatic { + new(name ? : string, renderFunction ? : Function): View; + } + + interface View { + name: string; + parentView: View; + isCreated: boolean; + isRendered: boolean; + isDestroyed: boolean; + renderCount: number; + autorun(runFunc: Function): void; + onViewCreated(func: Function): void; + onViewReady(func: Function): void; + onViewDestroyed(func: Function): void; + firstNode(): Node; + lastNode(): Node; + template: Template; + templateInstance(): TemplateInstance; + } + var currentView: View; + + function isTemplate(value: any): boolean; + + interface HelpersMap { + [key: string]: Function; + } + + interface EventsMap { + [key: string]: Function; + } + + var Template: TemplateStatic; + + interface TemplateStatic { + new(viewName ? : string, renderFunction ? : Function): Template; + + registerHelper(name: string, func: Function): void; + instance(): TemplateInstance; + currentData(): any; + parentData(numLevels: number): any; + } + + interface Template { + viewName: string; + renderFunction: Function; + constructView(): View; + head: Template; + find(selector: string): Template; + findAll(selector: string): Template[]; + $: any; + onCreated(cb: Function): void; + onRendered(cb: Function): void; + onDestroyed(cb: Function): void; + created: Function; + rendered: Function; + destroyed: Function; + helpers(helpersMap: HelpersMap): void; + events(eventsMap: EventsMap): void; + } + + var TemplateInstance: TemplateInstanceStatic; + + interface TemplateInstanceStatic { + new(view: View): TemplateInstance; + } + + interface TemplateInstance { + $(selector: string): any; + autorun(runFunc: Function): Object; + data: Object; + find(selector ? : string): TemplateInstance; + findAll(selector: string): TemplateInstance[]; + firstNode: Object; + lastNode: Object; + subscribe(name: string, ...args: any[]): Meteor.SubscriptionHandle; + subscriptionsReady(): boolean; + view: Object; + } + + function Each(argFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function Unless(conditionFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function If(conditionFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function Let(bindings: Function, contentFunc: Function): View; + + function With(data: Object | Function, contentFunc: Function): View; + + function getData(elementOrView ? : HTMLElement | View): Object; + + function getView(element ? : HTMLElement): View; + + function remove(renderedView: View): void; + + function render(templateOrView: Template | View, parentNode: Node, nextNode ? : Node, parentView ? : View): View; + + function renderWithData(templateOrView: Template | View, data: Object | Function, parentNode: Node, nextNode ? : Node, parentView ? : View): View; + + function toHTML(templateOrView: Template | View): string; + + function toHTMLWithData(templateOrView: Template | View, data: Object | Function): string; +} + +declare module "meteor/blaze" { + /// + + module Blaze { + var View: ViewStatic; + + interface ViewStatic { + new(name ? : string, renderFunction ? : Function): View; + } + + interface View { + name: string; + parentView: View; + isCreated: boolean; + isRendered: boolean; + isDestroyed: boolean; + renderCount: number; + autorun(runFunc: Function): void; + onViewCreated(func: Function): void; + onViewReady(func: Function): void; + onViewDestroyed(func: Function): void; + firstNode(): Node; + lastNode(): Node; + template: Template; + templateInstance(): TemplateInstance; + } + var currentView: View; + + function isTemplate(value: any): boolean; + + interface HelpersMap { + [key: string]: Function; + } + + interface EventsMap { + [key: string]: Function; + } + + var Template: TemplateStatic; + + interface TemplateStatic { + new(viewName ? : string, renderFunction ? : Function): Template; + + registerHelper(name: string, func: Function): void; + instance(): TemplateInstance; + currentData(): any; + parentData(numLevels: number): any; + } + + interface Template { + viewName: string; + renderFunction: Function; + constructView(): View; + head: Template; + find(selector: string): Template; + findAll(selector: string): Template[]; + $: any; + onCreated(cb: Function): void; + onRendered(cb: Function): void; + onDestroyed(cb: Function): void; + created: Function; + rendered: Function; + destroyed: Function; + helpers(helpersMap: HelpersMap): void; + events(eventsMap: EventsMap): void; + } + + var TemplateInstance: TemplateInstanceStatic; + + interface TemplateInstanceStatic { + new(view: View): TemplateInstance; + } + + interface TemplateInstance { + $(selector: string): any; + autorun(runFunc: Function): Object; + data: Object; + find(selector ? : string): TemplateInstance; + findAll(selector: string): TemplateInstance[]; + firstNode: Object; + lastNode: Object; + subscribe(name: string, ...args: any[]): Meteor.SubscriptionHandle; + subscriptionsReady(): boolean; + view: Object; + } + + function Each(argFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function Unless(conditionFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function If(conditionFunc: Function, contentFunc: Function, elseFunc ? : Function): View; + + function Let(bindings: Function, contentFunc: Function): View; + + function With(data: Object | Function, contentFunc: Function): View; + + function getData(elementOrView ? : HTMLElement | View): Object; + + function getView(element ? : HTMLElement): View; + + function remove(renderedView: View): void; + + function render(templateOrView: Template | View, parentNode: Node, nextNode ? : Node, parentView ? : View): View; + + function renderWithData(templateOrView: Template | View, data: Object | Function, parentNode: Node, nextNode ? : Node, parentView ? : View): View; + + function toHTML(templateOrView: Template | View): string; + + function toHTMLWithData(templateOrView: Template | View, data: Object | Function): string; + } +} +declare module BrowserPolicy { + interface framing { + disallow(): void; + restrictToOrigin(origin: string): void; + allowAll(): void; + } + + interface content { + allowEval(): void; + allowInlineStyles(): void; + allowInlineScripts(): void; + allowSameOriginForAll(): void; + allowDataUrlForAll(): void; + allowOriginForAll(origin: string): void; + allowImageOrigin(origin: string): void; + allowFrameOrigin(origin: string): void; + allowContentTypeSniffing(): void; + allowAllContentOrigin(): void; + allowAllContentDataUrl(): void; + allowAllContentSameOrigin(): void; + + disallowAll(): void; + disallowInlineStyles(): void; + disallowEval(): void; + disallowInlineScripts(): void; + disallowFont(): void; + disallowObject(): void; + disallowAllContent(): void; + } +} + +declare module "meteor/browser-policy" { + module BrowserPolicy { + interface framing { + disallow(): void; + restrictToOrigin(origin: string): void; + allowAll(): void; + } + + interface content { + allowEval(): void; + allowInlineStyles(): void; + allowInlineScripts(): void; + allowSameOriginForAll(): void; + allowDataUrlForAll(): void; + allowOriginForAll(origin: string): void; + allowImageOrigin(origin: string): void; + allowFrameOrigin(origin: string): void; + allowContentTypeSniffing(): void; + allowAllContentOrigin(): void; + allowAllContentDataUrl(): void; + allowAllContentSameOrigin(): void; + + disallowAll(): void; + disallowInlineStyles(): void; + disallowEval(): void; + disallowInlineScripts(): void; + disallowFont(): void; + disallowObject(): void; + disallowAllContent(): void; + } + } +} +declare module Match { + var Any: any; + var String: any; + var Integer: any; + var Boolean: any; + var undefined: any; + var Object: any; + + function Optional(pattern: any): boolean; + + function ObjectIncluding(dico: any): boolean; + + function OneOf(...patterns: any[]): any; + + function Where(condition: any): any; + + function test(value: any, pattern: any): boolean; +} + +declare function check(value: any, pattern: any): void; + +declare module "meteor/check" { + module Match { + var Any: any; + var String: any; + var Integer: any; + var Boolean: any; + var undefined: any; + var Object: any; + + function Optional(pattern: any): boolean; + + function ObjectIncluding(dico: any): boolean; + + function OneOf(...patterns: any[]): any; + + function Where(condition: any): any; + + function test(value: any, pattern: any): boolean; + } + + function check(value: any, pattern: any): void; +} + +declare module DDP { + interface DDPStatic { + subscribe(name: string, ...rest: any[]): Meteor.SubscriptionHandle; + call(method: string, ...parameters: any[]): void; + apply(method: string, ...parameters: any[]): void; + methods(IMeteorMethodsDictionary: any): any; + status(): DDPStatus; + reconnect(): void; + disconnect(): void; + onReconnect(): void; + } + + function _allSubscriptionsReady(): boolean; + + interface DDPStatus { + connected: boolean; + /** + * connected, + * connecting, + * failed, + * waiting, + * offline + */ + status: string; + retryCount: number; + retryTime ? : number; + reason ? : string; + } + + function connect(url: string): DDPStatic; +} + +declare module DDPCommon { + interface MethodInvocation { + new(options: {}): MethodInvocation; + + unblock(): void; + + setUserId(userId: number): void; + } +} + +declare module "meteor/ddp" { + /// + + module DDP { + interface DDPStatic { + subscribe(name: string, ...rest: any[]): Meteor.SubscriptionHandle; + call(method: string, ...parameters: any[]): void; + apply(method: string, ...parameters: any[]): void; + methods(IMeteorMethodsDictionary: any): any; + status(): DDPStatus; + reconnect(): void; + disconnect(): void; + onReconnect(): void; + } + + function _allSubscriptionsReady(): boolean; + + interface DDPStatus { + connected: boolean; + /** + * connected, + * connecting, + * failed, + * waiting, + * offline + */ + status: string; + retryCount: number; + retryTime ? : number; + reason ? : string; + } + + function connect(url: string): DDPStatic; + } + + module DDPCommon { + interface MethodInvocation { + new(options: {}): MethodInvocation; + + unblock(): void; + + setUserId(userId: number): void; + } + } +} +interface EJSONableCustomType { + clone(): EJSONableCustomType; + equals(other: Object): boolean; + toJSONValue(): JSONable; + typeName(): string; +} +interface EJSONable { + [key: string]: number | string | boolean | Object | number[] | string[] | Object[] | Date | Uint8Array | EJSONableCustomType; +} +interface JSONable { + [key: string]: number | string | boolean | Object | number[] | string[] | Object[]; +} +interface EJSON extends EJSONable {} + +declare module EJSON { + function addType(name: string, factory: (val: JSONable) => EJSONableCustomType): void; + + function clone < T > (val: T): T; + + function equals(a: EJSON, b: EJSON, options ? : { + keyOrderSensitive ? : boolean; + }): boolean; + + function fromJSONValue(val: JSONable): any; + + function isBinary(x: Object): boolean; + var newBinary: any; + + function parse(str: string): EJSON; + + function stringify(val: EJSON, options ? : { + indent ? : boolean | number | string; + canonical ? : boolean; + }): string; + + function toJSONValue(val: EJSON): JSONable; +} + +declare module "meteor/ejson" { + interface EJSONableCustomType { + clone(): EJSONableCustomType; + equals(other: Object): boolean; + toJSONValue(): JSONable; + typeName(): string; + } + interface EJSONable { + [key: string]: number | string | boolean | Object | number[] | string[] | Object[] | Date | Uint8Array | EJSONableCustomType; + } + interface JSONable { + [key: string]: number | string | boolean | Object | number[] | string[] | Object[]; + } + interface EJSON extends EJSONable {} + + module EJSON { + function addType(name: string, factory: (val: JSONable) => EJSONableCustomType): void; + + function clone < T > (val: T): T; + + function equals(a: EJSON, b: EJSON, options ? : { + keyOrderSensitive ? : boolean; + }): boolean; + + function fromJSONValue(val: JSONable): any; + + function isBinary(x: Object): boolean; + var newBinary: any; + + function parse(str: string): EJSON; + + function stringify(val: EJSON, options ? : { + indent ? : boolean | number | string; + canonical ? : boolean; + }): string; + + function toJSONValue(val: EJSON): JSONable; + } +} +declare module Email { + function send(options: { + from ? : string; + to ? : string | string[]; + cc ? : string | string[]; + bcc ? : string | string[]; + replyTo ? : string | string[]; + subject ? : string; + text ? : string; + html ? : string; + headers ? : Object; + attachments ? : Object[]; + mailComposer ? : MailComposer; + }): void; +} + +interface MailComposerOptions { + escapeSMTP: boolean; + encoding: string; + charset: string; + keepBcc: boolean; + forceEmbeddedImages: boolean; +} + +declare var MailComposer: MailComposerStatic; +interface MailComposerStatic { + new(options: MailComposerOptions): MailComposer; +} +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; +} + +declare module "meteor/email" { + module Email { + function send(options: { + from ? : string; + to ? : string | string[]; + cc ? : string | string[]; + bcc ? : string | string[]; + replyTo ? : string | string[]; + subject ? : string; + text ? : string; + html ? : string; + headers ? : Object; + attachments ? : Object[]; + mailComposer ? : MailComposer; + }): void; + } + + interface MailComposerOptions { + escapeSMTP: boolean; + encoding: string; + charset: string; + keepBcc: boolean; + forceEmbeddedImages: boolean; + } + + var MailComposer: MailComposerStatic; + interface MailComposerStatic { + new(options: MailComposerOptions): MailComposer; + } + 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; + } +} +declare module HTTP { + interface HTTPRequest { + content ? : string; + data ? : any; + query ? : string; + params ? : { + [id: string]: string + }; + auth ? : string; + headers ? : { + [id: string]: string + }; + timeout ? : number; + followRedirects ? : boolean; + } + + interface HTTPResponse { + statusCode ? : number; + headers ? : { + [id: string]: string + }; + content ? : string; + data ? : any; + } + + function call(method: string, url: string, options ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function del(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function get(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function post(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function put(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function call(method: string, url: string, options ? : { + content ? : string; + data ? : Object; + query ? : string; + params ? : Object; + auth ? : string; + headers ? : Object; + timeout ? : number; + followRedirects ? : boolean; + npmRequestOptions ? : Object; + beforeSend ? : Function; + }, asyncCallback ? : Function): HTTP.HTTPResponse; +} + +declare module "meteor/http" { + module HTTP { + interface HTTPRequest { + content ? : string; + data ? : any; + query ? : string; + params ? : { + [id: string]: string + }; + auth ? : string; + headers ? : { + [id: string]: string + }; + timeout ? : number; + followRedirects ? : boolean; + } + + interface HTTPResponse { + statusCode ? : number; + headers ? : { + [id: string]: string + }; + content ? : string; + data ? : any; + } + + function call(method: string, url: string, options ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function del(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function get(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function post(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function put(url: string, callOptions ? : HTTP.HTTPRequest, asyncCallback ? : Function): HTTP.HTTPResponse; + + function call(method: string, url: string, options ? : { + content ? : string; + data ? : Object; + query ? : string; + params ? : Object; + auth ? : string; + headers ? : Object; + timeout ? : number; + followRedirects ? : boolean; + npmRequestOptions ? : Object; + beforeSend ? : Function; + }, asyncCallback ? : Function): HTTP.HTTPResponse; + } +} + +declare module Meteor { + /** Global props **/ + var isClient: boolean; + var isCordova: boolean; + var isServer: boolean; + var release: string; + var settings: { + [id: string]: any + }; + /** props **/ + + /** User **/ + interface UserEmail { + address: string; + verified: boolean; + } + interface User { + _id ? : string; + username ? : string; + emails ? : UserEmail[]; + createdAt ? : number; + profile ? : any; + services ? : any; + } + + function user(): User; + + function userId(): string; + var users: Mongo.Collection < User > ; + /** User **/ + + /** Error **/ + var Error: ErrorStatic; + interface ErrorStatic { + new(error: string | number, reason ? : string, details ? : string): Error; + } + interface Error { + error: string | number; + reason ? : string; + details ? : string; + } + /** Error **/ + + /** Method **/ + function methods(methods: Object): void; + + function call(name: string, ...args: any[]): any; + + function apply(name: string, args: EJSONable[], options ? : { + wait ? : boolean; + onResultReceived ? : Function; + }, asyncCallback ? : Function): any; + /** Method **/ + + /** Url **/ + function absoluteUrl(path ? : string, options ? : { + secure ? : boolean; + replaceLocalhost ? : boolean; + rootUrl ? : string; + }): string; + /** Url **/ + + /** Timeout **/ + function setInterval(func: Function, delay: number): number; + + function setTimeout(func: Function, delay: number): number; + + function clearInterval(id: number): void; + + function clearTimeout(id: number): void; + + function defer(func: Function): void; + /** Timeout **/ + + /** utils **/ + function startup(func: Function): void; + + function wrapAsync(func: Function, context ? : Object): any; + /** utils **/ + + /** Pub/Sub **/ + interface SubscriptionHandle { + stop(): void; + ready(): boolean; + } + interface LiveQueryHandle { + stop(): void; + } + /** Pub/Sub **/ +} + +declare module "meteor/meteor" { + /// + /// + + module Meteor { + /** Global props **/ + var isClient: boolean; + var isCordova: boolean; + var isServer: boolean; + var release: string; + var settings: { + [id: string]: any + }; + /** props **/ + + /** User **/ + interface UserEmail { + address: string; + verified: boolean; + } + interface User { + _id ? : string; + username ? : string; + emails ? : UserEmail[]; + createdAt ? : number; + profile ? : any; + services ? : any; + } + + function user(): User; + + function userId(): string; + var users: Mongo.Collection < User > ; + /** User **/ + + /** Error **/ + var Error: ErrorStatic; + interface ErrorStatic { + new(error: string | number, reason ? : string, details ? : string): Error; + } + interface Error { + error: string | number; + reason ? : string; + details ? : string; + } + /** Error **/ + + /** Method **/ + function methods(methods: Object): void; + + function call(name: string, ...args: any[]): any; + + function apply(name: string, args: EJSONable[], options ? : { + wait ? : boolean; + onResultReceived ? : Function; + }, asyncCallback ? : Function): any; + /** Method **/ + + /** Url **/ + function absoluteUrl(path ? : string, options ? : { + secure ? : boolean; + replaceLocalhost ? : boolean; + rootUrl ? : string; + }): string; + /** Url **/ + + /** Timeout **/ + function setInterval(func: Function, delay: number): number; + + function setTimeout(func: Function, delay: number): number; + + function clearInterval(id: number): void; + + function clearTimeout(id: number): void; + + function defer(func: Function): void; + /** Timeout **/ + + /** utils **/ + function startup(func: Function): void; + + function wrapAsync(func: Function, context ? : Object): any; + /** utils **/ + + /** Pub/Sub **/ + interface SubscriptionHandle { + stop(): void; + ready(): boolean; + } + interface LiveQueryHandle { + stop(): void; + } + /** Pub/Sub **/ + } +} + +declare module Meteor { + /** Login **/ + interface LoginWithExternalServiceOptions { + requestPermissions ? : string[]; + requestOfflineToken ? : Boolean; + forceApprovalPrompt ? : Boolean; + loginUrlParameters ? : Object; + redirectUrl ? : string; + loginHint ? : string; + loginStyle ? : string; + } + + function loginWithMeteorDeveloperAccount(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithFacebook(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithGithub(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithGoogle(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithMeetup(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithTwitter(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithWeibo(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loggingIn(): boolean; + + function loginWith < ExternalService > (options ? : { + requestPermissions ? : string[]; + requestOfflineToken ? : boolean; + loginUrlParameters ? : Object; + userEmail ? : string; + loginStyle ? : string; + redirectUrl ? : string; + }, callback ? : Function): void; + + function loginWithPassword(user: Object | string, password: string, callback ? : Function): void; + + function logout(callback ? : Function): void; + + function logoutOtherClients(callback ? : Function): 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 **/ + function subscribe(name: string, ...args: any[]): Meteor.SubscriptionHandle; + /** Pub/Sub **/ +} + +declare module "meteor/meteor" { + /// + + module Meteor { + /** Login **/ + interface LoginWithExternalServiceOptions { + requestPermissions ? : string[]; + requestOfflineToken ? : Boolean; + forceApprovalPrompt ? : Boolean; + loginUrlParameters ? : Object; + redirectUrl ? : string; + loginHint ? : string; + loginStyle ? : string; + } + + function loginWithMeteorDeveloperAccount(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithFacebook(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithGithub(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithGoogle(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithMeetup(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithTwitter(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loginWithWeibo(options ? : Meteor.LoginWithExternalServiceOptions, callback ? : Function): void; + + function loggingIn(): boolean; + + function loginWith < ExternalService > (options ? : { + requestPermissions ? : string[]; + requestOfflineToken ? : boolean; + loginUrlParameters ? : Object; + userEmail ? : string; + loginStyle ? : string; + redirectUrl ? : string; + }, callback ? : Function): void; + + function loginWithPassword(user: Object | string, password: string, callback ? : Function): void; + + function logout(callback ? : Function): void; + + function logoutOtherClients(callback ? : Function): 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 **/ + function subscribe(name: string, ...args: any[]): Meteor.SubscriptionHandle; + /** Pub/Sub **/ + } +} +declare module Meteor { + /** Connection **/ + interface Connection { + id: string; + close: Function; + onClose: Function; + clientAddress: string; + httpHeaders: Object; + } + + function onConnection(callback: Function): void; + /** Connection **/ + + function publish(name: string, func: Function): void; +} + +interface Subscription { + added(collection: string, id: string, fields: Object): void; + changed(collection: string, id: string, fields: Object): void; + connection: Meteor.Connection; + error(error: Error): void; + onStop(func: Function): void; + ready(): void; + removed(collection: string, id: string): void; + stop(): void; + userId: string; +} + +declare module "meteor/meteor" { + module Meteor { + /** Connection **/ + interface Connection { + id: string; + close: Function; + onClose: Function; + clientAddress: string; + httpHeaders: Object; + } + + function onConnection(callback: Function): void; + /** Connection **/ + + function publish(name: string, func: Function): void; + } + + interface Subscription { + added(collection: string, id: string, fields: Object): void; + changed(collection: string, id: string, fields: Object): void; + connection: Meteor.Connection; + error(error: Error): void; + onStop(func: Function): void; + ready(): void; + removed(collection: string, id: string): void; + stop(): void; + userId: string; + } +} +declare module Mongo { + interface Selector { + [key: string]: any; + } + interface Selector extends Object {} + interface Modifier {} + interface SortSpecifier {} + interface FieldSpecifier { + [id: string]: Number; + } + + var Collection: CollectionStatic; + interface CollectionStatic { + new < T > (name: string, options ? : { + connection ? : Object; + idGeneration ? : string; + transform ? : Function; + }): Collection < T > ; + } + interface Collection < T > { + allow(options: { + insert ? : (userId: string, doc: T) => boolean; + update ? : (userId: string, doc: T, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: T) => boolean; + fetch ? : string[]; + transform ? : Function; + }): boolean; + deny(options: { + insert ? : (userId: string, doc: T) => boolean; + update ? : (userId: string, doc: T, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: T) => boolean; + fetch ? : string[]; + transform ? : Function; + }): boolean; + find(selector ? : Selector | ObjectID | string, options ? : { + sort ? : SortSpecifier; + skip ? : number; + limit ? : number; + fields ? : FieldSpecifier; + reactive ? : boolean; + transform ? : Function; + }): Cursor < T > ; + findOne(selector ? : Selector | ObjectID | string, options ? : { + sort ? : SortSpecifier; + skip ? : number; + fields ? : FieldSpecifier; + reactive ? : boolean; + transform ? : Function; + }): T; + insert(doc: T, callback ? : Function): string; + rawCollection(): any; + rawDatabase(): any; + remove(selector: Selector | ObjectID | string, callback ? : Function): number; + update(selector: Selector | ObjectID | string, modifier: Modifier, options ? : { + multi ? : boolean; + upsert ? : boolean; + }, callback ? : Function): number; + upsert(selector: Selector | ObjectID | string, modifier: Modifier, options ? : { + multi ? : boolean; + }, callback ? : Function): { + numberAffected ? : number;insertedId ? : string; + }; + _ensureIndex(indexName: string, options ? : { + [key: string]: any + }): void; + } + + var Cursor: CursorStatic; + interface CursorStatic { + new < T > (): Cursor < T > ; + } + interface ObserveCallbacks { + added ? (document: Object) : void; + addedAt ? (document: Object, atIndex: number, before: Object) : void; + changed ? (newDocument: Object, oldDocument: Object) : void; + changedAt ? (newDocument: Object, oldDocument: Object, indexAt: number) : void; + removed ? (oldDocument: Object) : void; + removedAt ? (oldDocument: Object, atIndex: number) : void; + movedTo ? (document: Object, fromIndex: number, toIndex: number, before: Object) : void; + } + interface ObserveChangesCallbacks { + added ? (id: string, fields: Object) : void; + addedBefore ? (id: string, fields: Object, before: Object) : void; + changed ? (id: string, fields: Object) : void; + movedBefore ? (id: string, before: Object) : void; + removed ? (id: string) : void; + } + interface Cursor < T > { + count(): number; + fetch(): Array < T > ; + forEach(callback: < T > (doc: T, index: number, cursor: Cursor < T > ) => void, thisArg ? : any): void; + map < U > (callback: (doc: T, index: number, cursor: Cursor < T > ) => U, thisArg ? : any): Array < U > ; + observe(callbacks: ObserveCallbacks): Meteor.LiveQueryHandle; + observeChanges(callbacks: ObserveChangesCallbacks): Meteor.LiveQueryHandle; + } + + var ObjectID: ObjectIDStatic; + interface ObjectIDStatic { + new(hexString ? : string): ObjectID; + } + interface ObjectID {} +} + +declare module "meteor/mongo" { + module Mongo { + interface Selector { + [key: string]: any; + } + interface Selector extends Object {} + interface Modifier {} + interface SortSpecifier {} + interface FieldSpecifier { + [id: string]: Number; + } + + var Collection: CollectionStatic; + interface CollectionStatic { + new < T > (name: string, options ? : { + connection ? : Object; + idGeneration ? : string; + transform ? : Function; + }): Collection < T > ; + } + interface Collection < T > { + allow(options: { + insert ? : (userId: string, doc: T) => boolean; + update ? : (userId: string, doc: T, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: T) => boolean; + fetch ? : string[]; + transform ? : Function; + }): boolean; + deny(options: { + insert ? : (userId: string, doc: T) => boolean; + update ? : (userId: string, doc: T, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: T) => boolean; + fetch ? : string[]; + transform ? : Function; + }): boolean; + find(selector ? : Selector | ObjectID | string, options ? : { + sort ? : SortSpecifier; + skip ? : number; + limit ? : number; + fields ? : FieldSpecifier; + reactive ? : boolean; + transform ? : Function; + }): Cursor < T > ; + findOne(selector ? : Selector | ObjectID | string, options ? : { + sort ? : SortSpecifier; + skip ? : number; + fields ? : FieldSpecifier; + reactive ? : boolean; + transform ? : Function; + }): T; + insert(doc: T, callback ? : Function): string; + rawCollection(): any; + rawDatabase(): any; + remove(selector: Selector | ObjectID | string, callback ? : Function): number; + update(selector: Selector | ObjectID | string, modifier: Modifier, options ? : { + multi ? : boolean; + upsert ? : boolean; + }, callback ? : Function): number; + upsert(selector: Selector | ObjectID | string, modifier: Modifier, options ? : { + multi ? : boolean; + }, callback ? : Function): { + numberAffected ? : number;insertedId ? : string; + }; + _ensureIndex(indexName: string, options ? : { + [key: string]: any + }): void; + } + + var Cursor: CursorStatic; + interface CursorStatic { + new < T > (): Cursor < T > ; + } + interface ObserveCallbacks { + added ? (document: Object) : void; + addedAt ? (document: Object, atIndex: number, before: Object) : void; + changed ? (newDocument: Object, oldDocument: Object) : void; + changedAt ? (newDocument: Object, oldDocument: Object, indexAt: number) : void; + removed ? (oldDocument: Object) : void; + removedAt ? (oldDocument: Object, atIndex: number) : void; + movedTo ? (document: Object, fromIndex: number, toIndex: number, before: Object) : void; + } + interface ObserveChangesCallbacks { + added ? (id: string, fields: Object) : void; + addedBefore ? (id: string, fields: Object, before: Object) : void; + changed ? (id: string, fields: Object) : void; + movedBefore ? (id: string, before: Object) : void; + removed ? (id: string) : void; + } + interface Cursor < T > { + count(): number; + fetch(): Array < T > ; + forEach(callback: < T > (doc: T, index: number, cursor: Cursor < T > ) => void, thisArg ? : any): void; + map < U > (callback: (doc: T, index: number, cursor: Cursor < T > ) => U, thisArg ? : any): Array < U > ; + observe(callbacks: ObserveCallbacks): Meteor.LiveQueryHandle; + observeChanges(callbacks: ObserveChangesCallbacks): Meteor.LiveQueryHandle; + } + + var ObjectID: ObjectIDStatic; + interface ObjectIDStatic { + new(hexString ? : string): ObjectID; + } + interface ObjectID {} + } +} +declare module Mongo { + interface AllowDenyOptions { + insert ? : (userId: string, doc: any) => boolean; + update ? : (userId: string, doc: any, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: any) => boolean; + fetch ? : string[]; + transform ? : Function; + } +} + +declare module "meteor/mongo" { + module Mongo { + interface AllowDenyOptions { + insert ? : (userId: string, doc: any) => boolean; + update ? : (userId: string, doc: any, fieldNames: string[], modifier: any) => boolean; + remove ? : (userId: string, doc: any) => boolean; + fetch ? : string[]; + transform ? : Function; + } + } +} +declare module 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: any[]): string; + // @param str, @return a random char in str + function choice(str: string): string; +} + +declare module "meteor/random" { + module 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: any[]): string; + // @param str, @return a random char in str + function choice(str: string): string; + } +} +declare var ReactiveVar: ReactiveVarStatic; +interface ReactiveVarStatic { + new < T > (initialValue: T, equalsFunc ? : Function): ReactiveVar < T > ; +} +interface ReactiveVar < T > { + get(): T; + set(newValue: T): void; +} + +declare module "meteor/reactive-var" { + var ReactiveVar: ReactiveVarStatic; + interface ReactiveVarStatic { + new < T > (initialValue: T, equalsFunc ? : Function): ReactiveVar < T > ; + } + interface ReactiveVar < T > { + get(): T; + set(newValue: T): void; + } +} + +declare module Session { + function equals(key: string, value: string | number | boolean | any): boolean; + + function get(key: string): any; + + function set(key: string, value: EJSONable | any): void; + + function setDefault(key: string, value: EJSONable | any): void; +} + +declare module "meteor/session" { + /// + + module Session { + function equals(key: string, value: string | number | boolean | any): boolean; + + function get(key: string): any; + + function set(key: string, value: EJSONable | any): void; + + function setDefault(key: string, value: EJSONable | any): void; + } +} + +declare var Template: TemplateStatic; +interface TemplateStatic extends Blaze.TemplateStatic { + new(viewName ? : string, renderFunction ? : Function): Blaze.Template; + body: Blaze.Template; + [index: string]: any | Blaze.Template; +} + +declare module "meteor/templating" { + /// + + var Template: TemplateStatic; + interface TemplateStatic extends Blaze.TemplateStatic { + new(viewName ? : string, renderFunction ? : Function): Blaze.Template; + body: Blaze.Template; + [index: string]: any | Blaze.Template; + } +} +interface ILengthAble { + length: number; +} + +interface ITinytestAssertions { + ok(doc: Object): void; + expect_fail(): void; + fail(doc: Object): void; + runId(): string; + equal < T > (actual: T, expected: T, message ? : string, not ? : boolean): void; + notEqual < T > (actual: T, expected: T, message ? : string): void; + instanceOf(obj: Object, klass: Function, message ? : string): void; + notInstanceOf(obj: Object, klass: Function, message ? : string): void; + matches(actual: any, regexp: RegExp, message ? : string): void; + notMatches(actual: any, regexp: RegExp, message ? : string): void; + throws(f: Function, expected ? : string | RegExp): void; + isTrue(v: boolean, msg ? : string): void; + isFalse(v: boolean, msg ? : string): void; + isNull(v: any, msg ? : string): void; + isNotNull(v: any, msg ? : string): void; + isUndefined(v: any, msg ? : string): void; + isNotUndefined(v: any, msg ? : string): void; + isNan(v: any, msg ? : string): void; + isNotNan(v: any, msg ? : string): void; + include < T > (s: Array < T > | Object | string, value: any, msg ? : string, not ? : boolean): void; + + notInclude < T > (s: Array < T > | Object | string, value: any, msg ? : string, not ? : boolean): void; + length(obj: ILengthAble, expected_length: number, msg ? : string): void; + _stringEqual(actual: string, expected: string, msg ? : string): void; +} + +declare module Tinytest { + function add(description: string, func: (test: ITinytestAssertions) => void): void; + + function addAsync(description: string, func: (test: ITinytestAssertions) => void): void; +} + +declare module "meteor/tiny-test" { + interface ILengthAble { + length: number; + } + + interface ITinytestAssertions { + ok(doc: Object): void; + expect_fail(): void; + fail(doc: Object): void; + runId(): string; + equal < T > (actual: T, expected: T, message ? : string, not ? : boolean): void; + notEqual < T > (actual: T, expected: T, message ? : string): void; + instanceOf(obj: Object, klass: Function, message ? : string): void; + notInstanceOf(obj: Object, klass: Function, message ? : string): void; + matches(actual: any, regexp: RegExp, message ? : string): void; + notMatches(actual: any, regexp: RegExp, message ? : string): void; + throws(f: Function, expected ? : string | RegExp): void; + isTrue(v: boolean, msg ? : string): void; + isFalse(v: boolean, msg ? : string): void; + isNull(v: any, msg ? : string): void; + isNotNull(v: any, msg ? : string): void; + isUndefined(v: any, msg ? : string): void; + isNotUndefined(v: any, msg ? : string): void; + isNan(v: any, msg ? : string): void; + isNotNan(v: any, msg ? : string): void; + include < T > (s: Array < T > | Object | string, value: any, msg ? : string, not ? : boolean): void; + + notInclude < T > (s: Array < T > | Object | string, value: any, msg ? : string, not ? : boolean): void; + length(obj: ILengthAble, expected_length: number, msg ? : string): void; + _stringEqual(actual: string, expected: string, msg ? : string): void; + } + + module Tinytest { + function add(description: string, func: (test: ITinytestAssertions) => void): void; + + function addAsync(description: string, func: (test: ITinytestAssertions) => void): void; + } +} +declare module App { + function accessRule(pattern: string, options ? : { + type ? : string; + launchExternal ? : boolean; + }): void; + + function configurePlugin(id: string, config: Object): void; + + function icons(icons: Object): void; + + function info(options: { + id ? : string; + version ? : string; + name ? : string; + description ? : string; + author ? : string; + email ? : string; + website ? : string; + }): void; + + function launchScreens(launchScreens: Object): void; + + function setPreference(name: string, value: string, platform ? : string): void; +} + +declare function execFileAsync(command: string, args ? : any[], options ? : { + cwd ? : Object; + env ? : Object; + stdio ? : any[] | string; + destination ? : any; + waitForClose ? : string; +}): any; +declare function execFileSync(command: string, args ? : any[], options ? : { + cwd ? : Object; + env ? : Object; + stdio ? : any[] | string; + destination ? : any; + waitForClose ? : string; +}): String; + +declare module Assets { + function getBinary(assetPath: string, asyncCallback ? : Function): EJSON; + + function getText(assetPath: string, asyncCallback ? : Function): string; +} + +declare module Cordova { + function depends(dependencies: { + [id: string]: string + }): void; +} + +declare module Npm { + function depends(dependencies: { + [id: string]: string + }): void; + + function require(name: string): any; +} + +declare namespace Package { + function describe(options: { + summary ? : string; + version ? : string; + name ? : string; + git ? : string; + documentation ? : string; + debugOnly ? : boolean; + prodOnly ? : boolean; + testOnly ? : boolean; + }): void; + + function onTest(func: (api: PackageAPI) => void): void; + + function onUse(func: (api: PackageAPI) => void): void; + + function registerBuildPlugin(options ? : { + name ? : string; + use ? : string | string[]; + sources ? : string[]; + npmDependencies ? : Object; + }): void; +} + +interface PackageAPI { + new(): PackageAPI; + addAssets(filenames: string | string[], architecture: string | string[]): void; + addFiles(filenames: string | string[], architecture ? : string | string[], options ? : { + bare ? : boolean; + }): void; + export (exportedObjects: string | string[], architecture ? : string | string[], exportOptions ? : Object, testOnly ? : boolean): void; + imply(packageNames: string | string[], architecture ? : string | string[]): void; + use(packageNames: string | string[], architecture ? : string | string[], options ? : { + weak ? : boolean; + unordered ? : boolean; + }): void; + versionsFrom(meteorRelease: string | string[]): void; +} + +declare var console: Console; + +declare module "meteor/tools" { + module App { + function accessRule(pattern: string, options ? : { + type ? : string; + launchExternal ? : boolean; + }): void; + + function configurePlugin(id: string, config: Object): void; + + function icons(icons: Object): void; + + function info(options: { + id ? : string; + version ? : string; + name ? : string; + description ? : string; + author ? : string; + email ? : string; + website ? : string; + }): void; + + function launchScreens(launchScreens: Object): void; + + function setPreference(name: string, value: string, platform ? : string): void; + } + + function execFileAsync(command: string, args ? : any[], options ? : { + cwd ? : Object; + env ? : Object; + stdio ? : any[] | string; + destination ? : any; + waitForClose ? : string; + }): any; + + function execFileSync(command: string, args ? : any[], options ? : { + cwd ? : Object; + env ? : Object; + stdio ? : any[] | string; + destination ? : any; + waitForClose ? : string; + }): String; + + module Assets { + function getBinary(assetPath: string, asyncCallback ? : Function): EJSON; + + function getText(assetPath: string, asyncCallback ? : Function): string; + } + + module Cordova { + function depends(dependencies: { + [id: string]: string + }): void; + } + + module Npm { + function depends(dependencies: { + [id: string]: string + }): void; + + function require(name: string): any; + } + + namespace Package { + function describe(options: { + summary ? : string; + version ? : string; + name ? : string; + git ? : string; + documentation ? : string; + debugOnly ? : boolean; + prodOnly ? : boolean; + testOnly ? : boolean; + }): void; + + function onTest(func: (api: PackageAPI) => void): void; + + function onUse(func: (api: PackageAPI) => void): void; + + function registerBuildPlugin(options ? : { + name ? : string; + use ? : string | string[]; + sources ? : string[]; + npmDependencies ? : Object; + }): void; + } + + interface PackageAPI { + new(): PackageAPI; + addAssets(filenames: string | string[], architecture: string | string[]): void; + addFiles(filenames: string | string[], architecture ? : string | string[], options ? : { + bare ? : boolean; + }): void; + export (exportedObjects: string | string[], architecture ? : string | string[], exportOptions ? : Object, testOnly ? : boolean): void; + imply(packageNames: string | string[], architecture ? : string | string[]): void; + use(packageNames: string | string[], architecture ? : string | string[], options ? : { + weak ? : boolean; + unordered ? : boolean; + }): void; + versionsFrom(meteorRelease: string | string[]): void; + } + + var console: Console; +} +declare module Tracker { + function Computation(): void; + interface Computation { + firstRun: boolean; + invalidate(): void; + invalidated: boolean; + onInvalidate(callback: Function): void; + onStop(callback: Function): void; + stop(): void; + stopped: boolean; + } + var currentComputation: Computation; + + var Dependency: DependencyStatic; + interface DependencyStatic { + new(): Dependency; + } + interface Dependency { + changed(): void; + depend(fromComputation ? : Computation): boolean; + hasDependents(): boolean; + } + + var active: boolean; + + function afterFlush(callback: Function): void; + + function autorun(runFunc: (computation: Computation) => void, options ? : { + onError ? : Function; + }): Computation; + + function flush(): void; + + function nonreactive(func: Function): void; + + function onInvalidate(callback: Function): void; +} + +declare module "meteor/tracker" { + module Tracker { + function Computation(): void; + interface Computation { + firstRun: boolean; + invalidate(): void; + invalidated: boolean; + onInvalidate(callback: Function): void; + onStop(callback: Function): void; + stop(): void; + stopped: boolean; + } + var currentComputation: Computation; + + var Dependency: DependencyStatic; + interface DependencyStatic { + new(): Dependency; + } + interface Dependency { + changed(): void; + depend(fromComputation ? : Computation): boolean; + hasDependents(): boolean; + } + + var active: boolean; + + function afterFlush(callback: Function): void; + + function autorun(runFunc: (computation: Computation) => void, options ? : { + onError ? : Function; + }): Computation; + + function flush(): void; + + function nonreactive(func: Function): void; + + function onInvalidate(callback: Function): void; + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7930f23b..138df9ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,16 +18,16 @@ "dev": true, "requires": { "@babel/types": "7.0.0-beta.44", - "jsesc": "2.5.1", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { - "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } @@ -67,9 +67,9 @@ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "dev": true, "requires": { - "chalk": "2.4.0", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -78,44 +78,28 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } }, "@babel/runtime": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.44.tgz", - "integrity": "sha512-4r2bym+kePWQH3eLne/IqVwqzbk43Lt6rzYQM+ARwSHfned1rFg9SX62SdKHtzSYq8NCoULxwHJS0T6a6r5hiA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "regenerator-runtime": "^0.13.2" } }, "@babel/template": { @@ -127,15 +111,7 @@ "@babel/code-frame": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "lodash": "4.17.4" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - } + "lodash": "^4.2.0" } }, "@babel/traverse": { @@ -150,33 +126,10 @@ "@babel/helper-split-export-declaration": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "debug": "3.1.0", - "globals": "11.4.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", - "dev": true - } + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" } }, "@babel/types": { @@ -185,23 +138,15 @@ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "2.0.0" - }, - "dependencies": { - "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=", - "dev": true - } + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" } }, "@types/node": { - "version": "9.6.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.6.tgz", - "integrity": "sha512-SJe0g5cZeGNDP5sD8mIX3scb+eq8LQQZ60FXiKZHipYSeEFZ5EKml+NNMiO76F74TY4PoMWlNxF/YRY40FOvZQ==", + "version": "12.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", + "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", "dev": true }, "acorn-jsx": { @@ -210,7 +155,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -221,6 +166,24 @@ } } }, + "airbnb-prop-types": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", + "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "dev": true, + "requires": { + "array.prototype.find": "^2.1.0", + "function.prototype.name": "^1.1.1", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.9.0" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -234,32 +197,38 @@ "dev": true }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "aria-query": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", - "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", "dev": true, "requires": { "ast-types-flow": "0.0.7", - "commander": "2.15.1" + "commander": "^2.11.0" } }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "array-union": { @@ -268,7 +237,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -277,6 +246,27 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + } + }, + "array.prototype.flat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", + "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -295,84 +285,22 @@ "dev": true }, "autoprefixer": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.3.0.tgz", - "integrity": "sha512-HY2K4efAvC97v6j83pgV97Lieal51xhIV8EitvS4SrWcI+IGVZgjpihvXImsmIUzA6kb/tglPKzERG1oRFOvRA==", - "requires": { - "browserslist": "3.2.4", - "caniuse-lite": "1.0.30000830", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.21", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "1.9.1" - } - }, - "browserslist": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.4.tgz", - "integrity": "sha512-Dwe62y/fNAcMfknzGJnkh7feISrrN0SmRvMFozb+Y2+qg7rfTIH5MS8yHzaIXcEWl8fPeIcdhZNQi1Lux+7dlg==", - "requires": { - "caniuse-lite": "1.0.30000830", - "electron-to-chromium": "1.3.42" - } - }, - "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "electron-to-chromium": { - "version": "1.3.42", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", - "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", - "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", - "requires": { - "chalk": "2.4.0", - "source-map": "0.6.1", - "supports-color": "5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", + "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "requires": { + "browserslist": "^3.2.8", + "caniuse-lite": "^1.0.30000864", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.23", + "postcss-value-parser": "^3.2.3" } }, "axobject-query": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", - "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, "requires": { "ast-types-flow": "0.0.7" @@ -384,59 +312,15 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - } + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-eslint": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.3.tgz", - "integrity": "sha512-0HeSTtaXg/Em7FCUWxwOT+KeFSO1O7LuRuzhk7g+1BjwdlQGlHq4OyMi3GqGxrNfEq8jEi6Hmt5ylEQUhurgiQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", "dev": true, "requires": { "@babel/code-frame": "7.0.0-beta.44", @@ -444,108 +328,13 @@ "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "eslint-visitor-keys": "^1.0.0" } }, "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true }, "balanced-match": { @@ -579,8 +368,8 @@ "version": "1.1.4", "bundled": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.5" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -591,7 +380,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -638,7 +427,7 @@ "version": "1.2.5", "bundled": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -649,26 +438,26 @@ "version": "2.7.4", "bundled": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "bundled": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "has-unicode": { @@ -679,22 +468,22 @@ "version": "0.4.21", "bundled": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { "version": "3.0.1", "bundled": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -709,7 +498,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -720,7 +509,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -731,8 +520,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" }, "dependencies": { "yallist": { @@ -745,7 +534,7 @@ "version": "1.1.0", "bundled": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -768,33 +557,33 @@ "version": "2.2.0", "bundled": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { "version": "0.9.1", "bundled": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.6", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { "version": "4.0.1", "bundled": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -805,18 +594,18 @@ "version": "1.1.10", "bundled": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { "version": "4.1.2", "bundled": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -831,7 +620,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -846,8 +635,8 @@ "version": "0.1.5", "bundled": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -862,10 +651,10 @@ "version": "1.2.6", "bundled": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -878,20 +667,20 @@ "version": "2.3.5", "bundled": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rimraf": { "version": "2.6.2", "bundled": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -922,23 +711,23 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { "version": "1.0.3", "bundled": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -949,13 +738,13 @@ "version": "4.4.1", "bundled": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" }, "dependencies": { "yallist": { @@ -972,7 +761,7 @@ "version": "1.1.2", "bundled": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -993,15 +782,18 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } }, "caller-path": { "version": "0.1.0", @@ -1009,7 +801,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -1019,9 +811,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30000830", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000830.tgz", - "integrity": "sha512-yMqGkujkoOIZfvOYiWdqPALgY/PVGiqCHUJb6yNq7xhI/pR+gQO0U2K6lRDqAiJv4+CIU3CtTLblNGw0QGnr6g==" + "version": "1.0.30001005", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz", + "integrity": "sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg==" }, "chalk": { "version": "1.1.3", @@ -1029,11 +821,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -1050,6 +842,20 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -1057,9 +863,9 @@ "dev": true }, "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "cli-width": { "version": "2.2.0", @@ -1078,7 +884,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1086,16 +892,10 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true - }, "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "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 }, "concat-map": { @@ -1110,9 +910,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "contains-path": { @@ -1121,17 +921,6 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1144,9 +933,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "css-select": { @@ -1155,40 +944,39 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.37" - } - }, "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "deep-is": { @@ -1198,13 +986,12 @@ "dev": true }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "object-keys": "^1.0.12" } }, "del": { @@ -1213,22 +1000,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "discontinuous-range": { @@ -1243,45 +1021,40 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-helpers": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", - "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -1290,14 +1063,19 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, + "electron-to-chromium": { + "version": "1.3.296", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz", + "integrity": "sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==" + }, "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "encoding": { @@ -1305,182 +1083,137 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "enzyme": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", - "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", - "dev": true, - "requires": { - "cheerio": "1.0.0-rc.2", - "function.prototype.name": "1.1.0", - "has": "1.0.1", - "is-boolean-object": "1.0.0", - "is-callable": "1.1.3", - "is-number-object": "1.0.3", - "is-string": "1.0.4", - "is-subset": "0.1.1", - "lodash": "4.17.4", - "object-inspect": "1.5.0", - "object-is": "1.0.1", - "object.assign": "4.1.0", - "object.entries": "1.0.4", - "object.values": "1.0.4", - "raf": "3.4.0", - "rst-selector-parser": "2.2.3" + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", + "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.1", + "cheerio": "^1.0.0-rc.2", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "html-element-map": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-callable": "^1.1.4", + "is-number-object": "^1.0.3", + "is-regex": "^1.0.4", + "is-string": "^1.0.4", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "object.values": "^1.0.4", + "raf": "^3.4.0", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.2" + } + }, + "enzyme-adapter-react-16": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz", + "integrity": "sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.12.1", + "enzyme-shallow-equal": "^1.0.0", + "has": "^1.0.3", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "react-is": "^16.10.2", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" }, "dependencies": { - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash": "4.17.4", - "parse5": "3.0.3" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, - "enzyme-adapter-react-16": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz", - "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==", + "enzyme-adapter-utils": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz", + "integrity": "sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g==", "dev": true, "requires": { - "enzyme-adapter-utils": "1.3.0", - "lodash": "4.17.4", - "object.assign": "4.1.0", - "object.values": "1.0.4", - "prop-types": "15.6.1", - "react-reconciler": "0.7.0", - "react-test-renderer": "16.3.2" + "airbnb-prop-types": "^2.15.0", + "function.prototype.name": "^1.1.1", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.1", + "prop-types": "^15.7.2", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "enzyme-adapter-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", - "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", + "enzyme-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz", + "integrity": "sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ==", "dev": true, "requires": { - "lodash": "4.17.4", - "object.assign": "4.1.0", - "prop-types": "15.6.1" + "has": "^1.0.3", + "object-is": "^1.0.1" } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.37", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "escape-string-regexp": { @@ -1488,62 +1221,50 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, "eslint": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.0.1", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { "acorn": { @@ -1558,10 +1279,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -1588,7 +1309,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -1597,9 +1318,9 @@ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cli-cursor": { @@ -1608,7 +1329,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "debug": { @@ -1626,8 +1347,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "figures": { @@ -1636,7 +1357,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "globals": { @@ -1657,20 +1378,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "is-fullwidth-code-point": { @@ -1691,7 +1412,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "pluralize": { @@ -1712,8 +1433,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "run-async": { @@ -1722,7 +1443,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx-lite": { @@ -1737,7 +1458,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "string-width": { @@ -1746,8 +1467,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -1756,7 +1477,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -1765,7 +1486,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "table": { @@ -1774,12 +1495,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" } } } @@ -1790,7 +1511,7 @@ "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", "dev": true, "requires": { - "eslint-config-airbnb-base": "12.1.0" + "eslint-config-airbnb-base": "^12.1.0" }, "dependencies": { "eslint-config-airbnb-base": { @@ -1799,7 +1520,7 @@ "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", "dev": true, "requires": { - "eslint-restricted-globals": "0.1.1" + "eslint-restricted-globals": "^0.1.1" } } } @@ -1810,152 +1531,163 @@ "integrity": "sha1-yGhjhAghIIz4EzxczlGQnCamFWk=", "dev": true, "requires": { - "object-assign": "4.1.1", - "resolve": "1.5.0" + "object-assign": "^4.0.1", + "resolve": "^1.1.6" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-plugin-import": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", - "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "dev": true, "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.7.1" + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.7.1" - } + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.6" } } } }, "eslint-plugin-jsx-a11y": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz", - "integrity": "sha1-VFg9GuRCSDFi4EDhPMMYZUZRAOU=", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "dev": true, "requires": { - "aria-query": "0.7.1", - "array-includes": "3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "0.1.0", - "damerau-levenshtein": "1.0.4", - "emoji-regex": "6.5.1", - "jsx-ast-utils": "2.0.1" - }, - "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "3.0.3" - } - } + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" } }, "eslint-plugin-meteor": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-4.2.0.tgz", - "integrity": "sha512-CTJaRzLHHsVkWrt2Iac0hxiswyAMi7A3rx5UXiHpXdutioZzGbKtNfVy1+Um6xkM1OEG7CQAs3YopbA64PNxMA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-4.2.2.tgz", + "integrity": "sha512-VLvsBdnwTlFjLmpKUCdoy4Sm1mlzeh8FcIXkyxJw2MaZMFHprIjbolZD0JguhP8yK3UwZelZaCIyvk2tidwIbA==", "dev": true, "requires": { - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "escope": "3.6.0", - "invariant": "2.2.2", - "lodash.find": "4.6.0", - "lodash.memoize": "4.1.2", - "path-exists": "3.0.0" - }, - "dependencies": { - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "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 - } + "invariant": "2.2.4" } }, "eslint-plugin-react": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", - "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", - "dev": true, - "requires": { - "doctrine": "2.1.0", - "has": "1.0.1", - "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.1" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz", + "integrity": "sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.12.0" }, "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { - "array-includes": "3.0.3" + "path-parse": "^1.0.6" } } } @@ -1972,8 +1704,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -1983,9 +1715,9 @@ "dev": true }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "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 }, "esquery": { @@ -1994,7 +1726,7 @@ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -2003,8 +1735,8 @@ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" } }, "estraverse": { @@ -2019,25 +1751,15 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } - }, "external-editor": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "faker": { @@ -2068,13 +1790,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" }, "dependencies": { "core-js": { @@ -2090,18 +1812,17 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -2110,18 +1831,12 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2135,14 +1850,15 @@ "dev": true }, "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", + "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "is-callable": "1.1.3" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1", + "functions-have-names": "^1.1.1", + "is-callable": "^1.1.4" } }, "functional-red-black-tree": { @@ -2151,24 +1867,30 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz", + "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { @@ -2177,12 +1899,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "graceful-fs": { @@ -2192,12 +1914,12 @@ "dev": true }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -2206,9 +1928,14 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, + "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.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", @@ -2216,45 +1943,78 @@ "dev": true }, "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "requires": { - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, + "html-element-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", + "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, "iconv-lite": { @@ -2280,8 +2040,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2291,17 +2051,17 @@ "dev": true }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "is-arrayish": { @@ -2316,19 +2076,10 @@ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-date-object": { @@ -2337,15 +2088,6 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, "is-number-object": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", @@ -2364,7 +2106,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2373,7 +2115,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-promise": { @@ -2388,7 +2130,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-resolvable": { @@ -2415,10 +2157,13 @@ "dev": true }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "isarray": { "version": "1.0.0", @@ -2437,8 +2182,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "js-tokens": { @@ -2447,19 +2192,19 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-schema-traverse": { @@ -2474,11 +2219,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } }, "levn": { "version": "0.3.0", @@ -2486,8 +2235,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -2496,10 +2245,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -2508,28 +2257,20 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "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 - } + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", "dev": true }, "lodash.flattendeep": { @@ -2538,10 +2279,10 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, "loose-envify": { @@ -2549,7 +2290,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { @@ -2558,8 +2299,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "meteor-node-stubs": { @@ -2568,28 +2309,28 @@ "integrity": "sha512-TI1aQRK0vqs94OCkUMkmf5lXNWfIsjSaEDP1inUuwRGt9w8/S2V+HdRikz9r1k/gew+7NcJieaqHsHX7pSTEgA==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", + "assert": "^1.4.1", + "browserify-zlib": "^0.1.4", + "buffer": "^4.9.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.7", + "events": "^1.1.1", "https-browserify": "0.0.1", - "os-browserify": "0.2.1", + "os-browserify": "^0.2.1", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.1.0", - "timers-browserify": "1.4.2", + "process": "^0.11.9", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "git+https://github.com/meteor/readable-stream.git", + "stream-browserify": "^2.0.1", + "stream-http": "^2.8.0", + "string_decoder": "^1.1.0", + "timers-browserify": "^1.4.2", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -2599,9 +2340,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -2635,7 +2376,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -2651,12 +2392,12 @@ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.1", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -2665,9 +2406,9 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -2676,9 +2417,9 @@ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.1" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -2687,8 +2428,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -2697,13 +2438,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -2712,7 +2453,7 @@ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~0.2.0" } }, "buffer": { @@ -2721,9 +2462,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-xor": { @@ -2744,8 +2485,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "concat-map": { @@ -2759,7 +2500,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2774,8 +2515,8 @@ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2784,10 +2525,10 @@ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.1", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2796,12 +2537,12 @@ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.1", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "crypto-browserify": { @@ -2810,17 +2551,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.1", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "date-now": { @@ -2835,8 +2576,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "diffie-hellman": { @@ -2845,9 +2586,9 @@ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "domain-browser": { @@ -2862,13 +2603,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "events": { @@ -2883,8 +2624,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "fs.realpath": { @@ -2897,12 +2638,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.1", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "hash-base": { @@ -2911,7 +2652,7 @@ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "inherits": "2.0.1" + "inherits": "^2.0.1" } }, "hash.js": { @@ -2920,8 +2661,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" }, "dependencies": { "inherits": { @@ -2938,9 +2679,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "https-browserify": { @@ -2966,8 +2707,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2987,8 +2728,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" }, "dependencies": { "hash-base": { @@ -2997,8 +2738,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } } } @@ -3009,8 +2750,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "minimalistic-assert": { @@ -3030,7 +2771,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "once": { @@ -3038,7 +2779,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-browserify": { @@ -3059,11 +2800,11 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "path-browserify": { @@ -3083,11 +2824,11 @@ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "process": { @@ -3097,9 +2838,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "public-encrypt": { @@ -3108,11 +2849,11 @@ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "punycode": { @@ -3139,7 +2880,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3148,26 +2889,27 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "readable-stream": { "version": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", + "from": "git+https://github.com/meteor/readable-stream.git", "dev": true, "requires": { - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.0", - "util-deprecate": "1.0.2" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.0", + "util-deprecate": "~1.0.1" }, "dependencies": { "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true } } @@ -3177,7 +2919,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { @@ -3186,8 +2928,8 @@ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.1" + "hash-base": "^2.0.0", + "inherits": "^2.0.1" } }, "safe-buffer": { @@ -3202,8 +2944,8 @@ "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", "dev": true, "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "stream-browserify": { @@ -3212,8 +2954,42 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-http": { @@ -3222,11 +2998,45 @@ "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "string_decoder": { @@ -3235,7 +3045,7 @@ "integrity": "sha512-8zQpRF6juocE69ae7CSPmYEGJe4VCXwP6S6dxUWI7i53Gwv54/ec41fiUA+X7BPGGv7fRSQJjBQVa0gomGaOgg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "timers-browserify": { @@ -3244,7 +3054,7 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "0.11.10" + "process": "~0.11.0" } }, "to-arraybuffer": { @@ -3286,12 +3096,6 @@ "inherits": "2.0.1" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -3326,7 +3130,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3344,6 +3148,12 @@ "minimist": "0.0.8" } }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3357,15 +3167,16 @@ "dev": true }, "nearley": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", - "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz", + "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==", "dev": true, "requires": { - "nomnom": "1.6.2", - "railroad-diagrams": "1.0.0", + "commander": "^2.19.0", + "moo": "^0.4.3", + "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", - "semver": "5.4.1" + "semver": "^5.4.1" } }, "node-fetch": { @@ -3373,30 +3184,37 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "nomnom": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true, - "requires": { - "colors": "0.5.1", - "underscore": "1.4.4" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "normalize-range": { @@ -3405,12 +3223,12 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -3418,21 +3236,15 @@ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", - "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", "dev": true }, "object-is": { @@ -3442,9 +3254,9 @@ "dev": true }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { @@ -3453,34 +3265,46 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", + "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0", - "function-bind": "1.1.1", - "has": "1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0", - "function-bind": "1.1.1", - "has": "1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "once": { @@ -3489,7 +3313,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optionator": { @@ -3498,20 +3322,14 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -3519,12 +3337,12 @@ "dev": true }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3533,7 +3351,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -3548,7 +3366,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse5": { @@ -3557,17 +3375,14 @@ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "dev": true, "requires": { - "@types/node": "9.6.6" + "@types/node": "*" } }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -3608,7 +3423,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "performance-now": { @@ -3635,22 +3450,52 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^2.1.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "dependencies": { + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, "prelude-ls": { "version": "1.1.2", @@ -3658,12 +3503,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -3675,17 +3514,38 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + }, + "dependencies": { + "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" + } + } + } + }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" } }, "pseudomap": { @@ -3695,12 +3555,12 @@ "dev": true }, "raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "dev": true, "requires": { - "performance-now": "2.1.0" + "performance-now": "^2.1.0" } }, "railroad-diagrams": { @@ -3716,18 +3576,17 @@ "dev": true, "requires": { "discontinuous-range": "1.0.0", - "ret": "0.1.15" + "ret": "~0.1.10" } }, "react": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.3.2.tgz", - "integrity": "sha512-o5GPdkhciQ3cEph6qgvYB7LTOHw/GB0qRI6ZFNugj49qJCFfgHwVNjZ5u+b7nif4vOeMIOuYj3CeYe2IBD74lg==", + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", + "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" } }, "react-addons-pure-render-mixin": { @@ -3735,8 +3594,8 @@ "resolved": "https://registry.npmjs.org/react-addons-pure-render-mixin/-/react-addons-pure-render-mixin-15.6.2.tgz", "integrity": "sha1-a4P0C2s27kBzXL1hJes/E84c3ck=", "requires": { - "fbjs": "0.8.16", - "object-assign": "4.1.1" + "fbjs": "^0.8.4", + "object-assign": "^4.1.0" } }, "react-addons-test-utils": { @@ -3746,100 +3605,84 @@ "dev": true }, "react-dom": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.2.tgz", - "integrity": "sha512-MMPko3zYncNrz/7gG17wJWUREZDvskZHXOwbttzl0F0L3wDmToyuETuo/r8Y5yvDejwYcRyWI1lvVBjLJWFwKA==", + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz", + "integrity": "sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.17.0" } }, "react-is": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.3.2.tgz", - "integrity": "sha512-ybEM7YOr4yBgFd6w8dJqwxegqZGJNBZl6U27HnGKuTZmDvVrD5quWOK/wAnMywiZzW+Qsk+l4X2c70+thp/A8Q==", - "dev": true + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", + "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==" }, - "react-reconciler": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz", - "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==", - "dev": true, - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" - } + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-router": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.2.0.tgz", - "integrity": "sha512-DY6pjwRhdARE4TDw7XjxjZsbx9lKmIcyZoZ+SDO7SBJ1KUeWNxT22Kara2AC7u6/c2SYEHlEDLnzBCcNhLE8Vg==", - "requires": { - "history": "4.7.2", - "hoist-non-react-statics": "2.5.0", - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.6.1", - "warning": "3.0.0" - }, - "dependencies": { - "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", - "requires": { - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" - } - }, - "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" - } + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", + "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "requires": { + "history": "^4.7.2", + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.1", + "warning": "^4.0.1" } }, "react-router-dom": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.2.2.tgz", - "integrity": "sha512-cHMFC1ZoLDfEaMFoKTjN7fry/oczMgRt5BKfMAkTu5zEuJvUiPp1J8d0eXSVTnBh6pxlbdqDhozunOOLtmKfPA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", "requires": { - "history": "4.7.2", - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "prop-types": "15.6.1", - "react-router": "4.2.0", - "warning": "3.0.0" + "history": "^4.7.2", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.1", + "react-router": "^4.3.1", + "warning": "^4.0.1" } }, "react-test-renderer": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.3.2.tgz", - "integrity": "sha512-lL8WHIpCTMdSe+CRkt0rfMxBkJFyhVrpdQ54BaJRIrXf9aVmbeHbRA8GFRpTvohPN5tPzMabmrzW2PUfWCfWwQ==", + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.11.0.tgz", + "integrity": "sha512-nh9gDl8R4ut+ZNNb2EeKO5VMvTKxwzurbSMuGBoKtjpjbg8JK/u3eVPVNi1h1Ue+eYK9oSzJjb+K3lzLxyA4ag==", "dev": true, "requires": { - "fbjs": "0.8.16", - "object-assign": "4.1.1", - "prop-types": "15.6.1", - "react-is": "16.3.2" + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.17.0" } }, "react-transition-group": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.3.1.tgz", - "integrity": "sha512-hu4/LAOFSKjWt1+1hgnOv3ldxmt6lvZGTWz4KUkFrqzXrNDIVSu6txIcPszw7PNduR8en9YTN55JLRyd/L1ZiQ==", - "requires": { - "dom-helpers": "3.3.1", - "loose-envify": "1.3.1", - "prop-types": "15.6.1" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "dependencies": { + "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" + } + } } }, "read-pkg": { @@ -3848,9 +3691,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -3859,19 +3702,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -3880,13 +3712,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rechoir": { @@ -3895,13 +3727,19 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "dev": true + }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regexpp": { "version": "1.1.0", @@ -3909,23 +3747,14 @@ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve": { @@ -3934,7 +3763,7 @@ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -3944,9 +3773,9 @@ "dev": true }, "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, "ret": { "version": "0.1.15", @@ -3960,7 +3789,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "rst-selector-parser": { @@ -3969,8 +3798,8 @@ "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", "dev": true, "requires": { - "lodash.flattendeep": "4.4.0", - "nearley": "2.13.0" + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" } }, "rx-lite": { @@ -3985,7 +3814,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "3.1.2" + "rx-lite": "*" } }, "safe-buffer": { @@ -3994,6 +3823,15 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", @@ -4011,7 +3849,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4021,14 +3859,14 @@ "dev": true }, "shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "signal-exit": { @@ -4037,41 +3875,25 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -4080,14 +3902,14 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "sprintf-js": { @@ -4096,13 +3918,44 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "string.prototype.trim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", + "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4111,7 +3964,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -4126,6 +3979,14 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4138,19 +3999,29 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "tiny-invariant": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", + "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "trim-right": { @@ -4165,7 +4036,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "typedarray": { @@ -4179,12 +4050,6 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4192,26 +4057,26 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "whatwg-fetch": { @@ -4225,7 +4090,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "wordwrap": { @@ -4246,7 +4111,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "yallist": { diff --git a/package.json b/package.json index ae598360..25b27186 100644 --- a/package.json +++ b/package.json @@ -9,32 +9,32 @@ "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests" }, "dependencies": { - "@babel/runtime": "^7.0.0-beta.44", - "autoprefixer": "^8.3.0", + "@babel/runtime": "^7.6.3", + "autoprefixer": "^8.6.5", "bcrypt": "^2.0.1", - "classnames": "^2.2.5", + "classnames": "^2.2.6", "faker": "^4.1.0", - "prop-types": "^15.6.1", - "react": "^16.3.2", + "prop-types": "^15.7.2", + "react": "^16.11.0", "react-addons-pure-render-mixin": "^15.6.2", - "react-dom": "^16.3.2", - "react-router-dom": "^4.2.2", - "react-transition-group": "^2.3.1" + "react-dom": "^16.11.0", + "react-router-dom": "^4.3.1", + "react-transition-group": "^2.9.0" }, "devDependencies": { - "babel-eslint": "^8.2.3", - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.1.1", + "babel-eslint": "^8.2.6", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.15.1", "eslint": "^4.19.1", "eslint-config-airbnb": "^16.1.0", "eslint-import-resolver-meteor": "^0.4.0", - "eslint-plugin-import": "^2.11.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-meteor": "^4.2.0", - "eslint-plugin-react": "^7.7.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-meteor": "^4.2.2", + "eslint-plugin-react": "^7.16.0", "meteor-node-stubs": "^0.3.3", "react-addons-test-utils": "^15.6.2", - "shelljs": "^0.8.1" + "shelljs": "^0.8.3" }, "eslintConfig": { "parser": "babel-eslint", From 16f917745a0f92dc51163e8c6e0378389d252e07 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Tue, 29 Oct 2019 21:16:23 +0800 Subject: [PATCH 02/43] Transform App component in functional component --- imports/ui/layouts/App.jsx | 126 +++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 70 deletions(-) diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index a70aa479..910ba589 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { useEffect, useState } from 'react'; import { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom'; import PropTypes from 'prop-types'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; @@ -17,50 +17,45 @@ import NotFoundPage from '../pages/NotFoundPage.jsx'; const CONNECTION_ISSUE_TIMEOUT = 5000; -export default class App extends Component { - static getDerivedStateFromProps(nextProps) { - // Store a default list path that can be redirected to from "/" when - // the list is ready. - const newState = { defaultList: null, redirectTo: null }; - if (!nextProps.loading) { - const list = Lists.findOne(); - newState.defaultList = `/lists/${list._id}`; - } - return newState; - } - - constructor(props) { - super(props); - this.state = { - showConnectionIssue: false, - defaultList: null, - redirectTo: null, - }; - this.toggleMenu = this.toggleMenu.bind(this); - this.closeMenu = this.toggleMenu.bind(this, false); - this.logout = this.logout.bind(this); - } +export const App = ({ + // current meteor user + user, + // server connection status + connected, + // subscription status + loading, + // is side menu open? + menuOpen, + // all lists visible to the current user + lists, +}) => { + const [showConnectionIssue, setShowConnectionIssue] = useState(false); + const [defaultList, setDefaultList] = useState(null); + const [redirectTo, setRedirectTo] = useState(null); - componentDidMount() { + useEffect(() => { setTimeout(() => { - /* eslint-disable react/no-did-mount-set-state */ - this.setState({ showConnectionIssue: true }); + setShowConnectionIssue(true); }, CONNECTION_ISSUE_TIMEOUT); - } + }, []); + + useEffect(() => { + if (!loading) { + const list = Lists.findOne(); + setDefaultList(`/lists/${list._id}`); + } + }, [loading]); - toggleMenu() { - this.props.menuOpen.set(!this.props.menuOpen.get()); - } + const closeMenu = () => { + menuOpen.set(false); + }; - logout() { + const logout = () => { Meteor.logout(); - this.setState({ - redirectTo: this.state.defaultList, - }); - } + setRedirectTo(defaultList); + }; - renderRedirect(location) { - const { redirectTo, defaultList } = this.state; + const renderRedirect = (location) => { const { pathname } = location; let redirect = null; if (redirectTo && redirectTo !== pathname) { @@ -68,34 +63,30 @@ export default class App extends Component { } else if (pathname === '/' && defaultList) { redirect = ; } + setRedirectTo(null); return redirect; - } + }; - renderContent(location) { - const { - user, - connected, - lists, - menuOpen, - loading, - } = this.props; - const { showConnectionIssue } = this.state; + renderRedirect.propTypes = { + pathname: PropTypes.string.isRequired, + }; + const renderContent = (location) => { const commonChildProps = { - menuOpen: this.props.menuOpen, + menuOpen, }; return (
{showConnectionIssue && !connected ? : null} -
+
{loading ? ( @@ -128,35 +119,28 @@ export default class App extends Component { - )} + )}
); - } + }; - render() { - return ( - - ( - this.renderRedirect(location) || this.renderContent(location) - )} - /> - - ); - } -} + return ( + + ( + renderRedirect(location) || renderContent(location) + )} + /> + + ); +}; App.propTypes = { - // current meteor user user: PropTypes.object, - // server connection status connected: PropTypes.bool.isRequired, - // subscription status loading: PropTypes.bool.isRequired, - // is side menu open? menuOpen: PropTypes.object.isRequired, - // all lists visible to the current user lists: PropTypes.array, }; @@ -164,3 +148,5 @@ App.defaultProps = { user: null, lists: [], }; + +export default App; From 104adc278f271fe561621563eae33edbf16c9b34 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 09:29:17 +0800 Subject: [PATCH 03/43] Create the global state providers GlobalStateProvider, LocaleProvider, useLocale, MenuOpenProvider, useMenuOpen --- imports/ui/layouts/App.jsx | 73 ++++++++++++------------ imports/ui/state/GlobalStateProvider.jsx | 22 +++++++ imports/ui/state/LocaleState.jsx | 28 +++++++++ imports/ui/state/MenuOpenState.jsx | 35 ++++++++++++ 4 files changed, 123 insertions(+), 35 deletions(-) create mode 100644 imports/ui/state/GlobalStateProvider.jsx create mode 100644 imports/ui/state/LocaleState.jsx create mode 100644 imports/ui/state/MenuOpenState.jsx diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index 910ba589..2ca61586 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -14,6 +14,7 @@ import ListPageContainer from '../containers/ListPageContainer.jsx'; import AuthPageSignIn from '../pages/AuthPageSignIn.jsx'; import AuthPageJoin from '../pages/AuthPageJoin.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; +import { GlobalStateProvider } from '../state/GlobalStateProvider.jsx'; const CONNECTION_ISSUE_TIMEOUT = 5000; @@ -91,34 +92,34 @@ export const App = ({ {loading ? ( ) : ( - - - - ( - - )} - /> - } - /> - } - /> - } - /> - - - + + + + ( + + )} + /> + } + /> + } + /> + } + /> + + + )}
@@ -126,13 +127,15 @@ export const App = ({ }; return ( - - ( - renderRedirect(location) || renderContent(location) - )} - /> - + + + ( + renderRedirect(location) || renderContent(location) + )} + /> + + ); }; diff --git a/imports/ui/state/GlobalStateProvider.jsx b/imports/ui/state/GlobalStateProvider.jsx new file mode 100644 index 00000000..4a29d172 --- /dev/null +++ b/imports/ui/state/GlobalStateProvider.jsx @@ -0,0 +1,22 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { LocaleProvider } from './LocaleState'; +import { MenuOpenProvider } from './MenuOpenState'; + +export const GlobalStateProvider = ({ + menuOpen, + ...props, +}) => ( + + + +); + +GlobalStateProvider.propTypes = { + menuOpen: PropTypes.bool, +}; + +GlobalStateProvider.defaultProps = { + menuOpen: false, +}; \ No newline at end of file diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx new file mode 100644 index 00000000..44b11a62 --- /dev/null +++ b/imports/ui/state/LocaleState.jsx @@ -0,0 +1,28 @@ +import React, { + createContext, + useContext, + useMemo, + useState, +} from 'react'; +import i18n from 'meteor/universe:i18n'; + +const LocaleContext = createContext(undefined); + +const useLocale = () => { + const context = useContext(localeContext); + + if (!context) { + throw new Error('useLocale must be used within a LocaleProvider'); + } + + return context; +}; + +const LocaleProvider = (props) => { + const [locale, setLocale] = useState(i18n.getLocale()); + const value = useMemo(() => [locale, setLocale], [locale]); + + return ; +}; + +export { LocaleProvider, useLocale }; diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx new file mode 100644 index 00000000..1e92aa8d --- /dev/null +++ b/imports/ui/state/MenuOpenState.jsx @@ -0,0 +1,35 @@ +import React, { + createContext, + useContext, + useMemo, + useState, +} from 'react'; +import PropTypes from 'prop-types'; + +const MenuOpenContext = createContext(undefined); + +const useMenuOpen = () => { + const context = useContext(menuOpenContext); + + if (!context) { + throw new Error('useMenuOpen must be used within a MenuOpenProvider'); + } + + return context; +}; + +const MenuOpenProvider = ({ + menuOpen: initMenuOpen, + ...props, +}) => { + const [menuOpen, setMenuOpen] = useState(initMenuOpen); + const value = useMemo(() => [menuOpen, setMenuOpen], [menuOpen]); + + return ; +}; + +MenuOpenProvider.propTypes = { + menuOpen: PropTypes.bool.isRequired, +}; + +export { MenuOpenProvider, useMenuOpen }; From 2f9db6f09b1bb28c40ec3ba89d9cd039532c7c23 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 10:05:21 +0800 Subject: [PATCH 04/43] Transform NotFound in FC + split AppContent from App Use the menuOpen global state to manage the menu opening through a transition transform from a state to a reactive var --- imports/ui/layouts/App.jsx | 27 +++++--- imports/ui/layouts/AppContent.jsx | 100 +++++++++++++++++++++++++++++ imports/ui/pages/NotFoundPage.jsx | 32 ++++----- imports/ui/state/LocaleState.jsx | 2 +- imports/ui/state/MenuOpenState.jsx | 2 +- 5 files changed, 136 insertions(+), 27 deletions(-) create mode 100644 imports/ui/layouts/AppContent.jsx diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index 2ca61586..910eae4c 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -15,6 +15,8 @@ import AuthPageSignIn from '../pages/AuthPageSignIn.jsx'; import AuthPageJoin from '../pages/AuthPageJoin.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import { GlobalStateProvider } from '../state/GlobalStateProvider.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; +import AppContent from './AppContent.jsx'; const CONNECTION_ISSUE_TIMEOUT = 5000; @@ -25,8 +27,6 @@ export const App = ({ connected, // subscription status loading, - // is side menu open? - menuOpen, // all lists visible to the current user lists, }) => { @@ -47,10 +47,6 @@ export const App = ({ } }, [loading]); - const closeMenu = () => { - menuOpen.set(false); - }; - const logout = () => { Meteor.logout(); setRedirectTo(defaultList); @@ -71,11 +67,15 @@ export const App = ({ renderRedirect.propTypes = { pathname: PropTypes.string.isRequired, }; - +/* const renderContent = (location) => { + const [menuOpen, setMenuOpen] = useMenuOpen(); const commonChildProps = { menuOpen, }; + const closeMenu = () => { + setMenuOpen(false); + }; return (
@@ -125,13 +125,22 @@ export const App = ({
); }; - + */ return ( ( - renderRedirect(location) || renderContent(location) + renderRedirect(location) || ( + + ) )} /> diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx new file mode 100644 index 00000000..ee3bfb66 --- /dev/null +++ b/imports/ui/layouts/AppContent.jsx @@ -0,0 +1,100 @@ +import React from 'react'; +import { Switch, Route } from 'react-router-dom'; +import PropTypes from 'prop-types'; +import { TransitionGroup, CSSTransition } from 'react-transition-group'; +import UserMenu from '../components/UserMenu.jsx'; +import ListList from '../components/ListList.jsx'; +import LanguageToggle from '../components/LanguageToggle.jsx'; +import ConnectionNotification from '../components/ConnectionNotification.jsx'; +import Loading from '../components/Loading.jsx'; +import ListPageContainer from '../containers/ListPageContainer.jsx'; +import AuthPageSignIn from '../pages/AuthPageSignIn.jsx'; +import AuthPageJoin from '../pages/AuthPageJoin.jsx'; +import NotFoundPage from '../pages/NotFoundPage.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; + +export const AppContent = ({ + connexionNotification, + lists, + loading, + location, + logout, + user, +}) => { + const [menuOpen, setMenuOpen] = useMenuOpen(); + const closeMenu = () => { + setMenuOpen(false); + }; + const transitionMenuOpen = { + get: () => menuOpen, + set: (newMenuOpen) => setMenuOpen(newMenuOpen), + }; + const commonChildProps = { + menuOpen: transitionMenuOpen, + }; + + return ( +
+ + {connexionNotification + ? + : null} +
+
+ {loading ? ( + + ) : ( + + + + ( + + )} + /> + } + /> + } + /> + } + /> + + + + )} +
+
+ ); +}; + +AppContent.propTypes = { + connexionNotification: PropTypes.bool, + lists: PropTypes.array, + loading: PropTypes.bool.isRequired, + location: PropTypes.shape({ + pathname: PropTypes.string.isRequired, + }).isRequired, + logout: PropTypes.func.isRequired, + user: PropTypes.object, +}; + +AppContent.defaultProps = { + connexionNotification: false, +}; + +export default AppContent; \ No newline at end of file diff --git a/imports/ui/pages/NotFoundPage.jsx b/imports/ui/pages/NotFoundPage.jsx index d954a1d5..1f414047 100644 --- a/imports/ui/pages/NotFoundPage.jsx +++ b/imports/ui/pages/NotFoundPage.jsx @@ -4,24 +4,24 @@ import i18n from 'meteor/universe:i18n'; import BaseComponent from '../components/BaseComponent.jsx'; import MobileMenu from '../components/MobileMenu.jsx'; import Message from '../components/Message.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; -class NotFoundPage extends BaseComponent { - render() { - return ( -
- -
- -
+const NotFoundPage = () => { + const [menuOpen, setMenuOpen] = useMenuOpen(); + const transitionMenuOpen = { + get: () => menuOpen, + set: (newMenuOpen) => setMenuOpen(newMenuOpen), + }; + return ( +
+ +
+
- ); - } -} - -NotFoundPage.propTypes = { - menuOpen: PropTypes.object.isRequired, +
+ ); }; export default NotFoundPage; diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx index 44b11a62..7636b543 100644 --- a/imports/ui/state/LocaleState.jsx +++ b/imports/ui/state/LocaleState.jsx @@ -9,7 +9,7 @@ import i18n from 'meteor/universe:i18n'; const LocaleContext = createContext(undefined); const useLocale = () => { - const context = useContext(localeContext); + const context = useContext(LocaleContext); if (!context) { throw new Error('useLocale must be used within a LocaleProvider'); diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx index 1e92aa8d..16898c08 100644 --- a/imports/ui/state/MenuOpenState.jsx +++ b/imports/ui/state/MenuOpenState.jsx @@ -9,7 +9,7 @@ import PropTypes from 'prop-types'; const MenuOpenContext = createContext(undefined); const useMenuOpen = () => { - const context = useContext(menuOpenContext); + const context = useContext(MenuOpenContext); if (!context) { throw new Error('useMenuOpen must be used within a MenuOpenProvider'); From 88f273fe53117d980044914aae7bb7649e216b03 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 14:30:06 +0800 Subject: [PATCH 05/43] Transform ListPage in FC Call useMenuOpen though it does not need menuOpen because its children still need it though props. --- imports/ui/pages/ListPage.jsx | 101 ++++++++++++++++------------------ 1 file changed, 46 insertions(+), 55 deletions(-) diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index b47e0920..c5b9bb32 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -1,75 +1,66 @@ -import React from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from '../components/BaseComponent.jsx'; import ListHeader from '../components/ListHeader.jsx'; import TodoItem from '../components/TodoItem.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import Message from '../components/Message.jsx'; +import { useMenuOpen } from '../state/MenuOpenState'; -export default class ListPage extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { editingTodo: null }); - this.onEditingChange = this.onEditingChange.bind(this); - } - - onEditingChange(id, editing) { - this.setState({ - editingTodo: editing ? id : null, - }); - } +export const ListPage = ({ + list, + todos, + loading, + listExists, +}) => { + const [menuOpen] = useMenuOpen(); + const [editingTodo, setEditingTodo] = useState(null); - render() { - const { - list, - listExists, - loading, - todos, - } = this.props; - const { editingTodo } = this.state; + const onEditingChange = (id, editing) => { + setEditingTodo(editing ? id : null); + }; - if (!listExists) { - return ; - } - - let Todos; - if (!todos || !todos.length) { - Todos = ( - - ); - } else { - Todos = todos.map(todo => ( - - )); - } + if (!listExists) { + return ; + } - return ( -
- -
- {loading - ? - : Todos} -
-
+ let Todos; + if (!todos || !todos.length) { + Todos = ( + ); + } else { + Todos = todos.map(todo => ( + + )); } -} + + return ( +
+ +
+ {loading + ? + : Todos} +
+
+ ); +}; ListPage.propTypes = { list: PropTypes.object, todos: PropTypes.array, loading: PropTypes.bool, listExists: PropTypes.bool, - menuOpen: PropTypes.object.isRequired, }; + +export default ListPage; From 5c9289213f5d18df4d2bcf849ba01028c52cf697 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 14:35:22 +0800 Subject: [PATCH 06/43] Transform MobileMenu in FC --- imports/ui/components/MobileMenu.jsx | 42 +++++++++++----------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/imports/ui/components/MobileMenu.jsx b/imports/ui/components/MobileMenu.jsx index f06f0a09..a2d95882 100644 --- a/imports/ui/components/MobileMenu.jsx +++ b/imports/ui/components/MobileMenu.jsx @@ -1,34 +1,24 @@ import React from 'react'; -import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; -class MobileMenu extends BaseComponent { - constructor(props) { - super(props); - this.toggleMenu = this.toggleMenu.bind(this); - } +export const MobileMenu = () => { + const [menuOpen, setMenuOpen] = useMenuOpen(); - toggleMenu() { - this.props.menuOpen.set(!this.props.menuOpen.get()); - } + const toggleMenu = () => { + setMenuOpen(!menuOpen); + }; - render() { - return ( -
- - - -
- ); - } -} - -MobileMenu.propTypes = { - menuOpen: PropTypes.object.isRequired, + return ( +
+ + + +
+ ); }; export default MobileMenu; From 91600884547eb583cd755cbceb5e6d7af16ca832 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 14:51:06 +0800 Subject: [PATCH 07/43] Clean up NotFoundPage Remove unnecessary imports, remove transitional menuOpen --- imports/ui/pages/NotFoundPage.jsx | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/imports/ui/pages/NotFoundPage.jsx b/imports/ui/pages/NotFoundPage.jsx index 1f414047..3f8187ea 100644 --- a/imports/ui/pages/NotFoundPage.jsx +++ b/imports/ui/pages/NotFoundPage.jsx @@ -1,27 +1,17 @@ import React from 'react'; -import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from '../components/BaseComponent.jsx'; import MobileMenu from '../components/MobileMenu.jsx'; import Message from '../components/Message.jsx'; -import { useMenuOpen } from '../state/MenuOpenState.jsx'; -const NotFoundPage = () => { - const [menuOpen, setMenuOpen] = useMenuOpen(); - const transitionMenuOpen = { - get: () => menuOpen, - set: (newMenuOpen) => setMenuOpen(newMenuOpen), - }; - return ( -
- -
- -
+export const NotFoundPage = () => ( +
+ +
+
- ); -}; +
+); export default NotFoundPage; From 3dcceb87d73e1988285294f546d4106f52e2a5d6 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 15:34:17 +0800 Subject: [PATCH 08/43] Transform JoinPage in FC I18n is broken on this page and NotFound, since inherited BaseComponent was in charge of it --- imports/ui/pages/AuthPageJoin.jsx | 163 ++++++++++++++---------------- 1 file changed, 76 insertions(+), 87 deletions(-) diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index f4d5c7c3..165a8e24 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -1,20 +1,17 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from '../components/BaseComponent.jsx'; import AuthPage from './AuthPage.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; -class JoinPage extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { errors: {} }); - this.onSubmit = this.onSubmit.bind(this); - } +export const JoinPage = () => { + const [menuOpen] = useMenuOpen(); + const [errors, setErrors] = useState({}); + const [redirectTo, setRedirectTo] = useState(null); - onSubmit(event) { + const onSubmit = (event) => { event.preventDefault(); const email = this.email.value; const password = this.password.value; @@ -31,7 +28,7 @@ class JoinPage extends BaseComponent { errors.confirm = i18n.__('pages.authPageJoin.passwordConfirm'); } - this.setState({ errors }); + setErrors(errors); if (Object.keys(errors).length) { return; } @@ -41,89 +38,81 @@ class JoinPage extends BaseComponent { password, }, (err) => { if (err) { - this.setState({ - errors: { none: err.reason }, - }); + setErrors({ none: err.reason }); } - this.redirectTo('/'); + setRedirectTo('/'); }); } - render() { - const { errors } = this.state; - const errorMessages = Object.keys(errors).map(key => errors[key]); - const errorClass = key => errors[key] && 'error'; - - const content = ( -
-

- {i18n.__('pages.authPageJoin.join')} -

-

- {i18n.__('pages.authPageJoin.joinReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageJoin.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageJoin.password')} - /> - -
-
- { this.confirm = c; }} - placeholder={i18n.__('pages.authPageJoin.confirmPassword')} - /> - -
- -
-
- ); + const errorMessages = Object.values(errors); + const errorClass = key => errors[key] && 'error'; - const link = ( - - {i18n.__('pages.authPageJoin.haveAccountSignIn')} - - ); + const content = ( +
+

+ {i18n.__('pages.authPageJoin.join')} +

+

+ {i18n.__('pages.authPageJoin.joinReason')} +

+
+
+ {errorMessages.map(msg => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageJoin.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageJoin.password')} + /> + +
+
+ { this.confirm = c; }} + placeholder={i18n.__('pages.authPageJoin.confirmPassword')} + /> + +
+ +
+
+ ); - return this.renderRedirect() || - ; - } -} + const link = ( + + {i18n.__('pages.authPageJoin.haveAccountSignIn')} + + ); -JoinPage.propTypes = { - menuOpen: PropTypes.object.isRequired, + return redirectTo + ? + : ; }; export default JoinPage; From d5361c3f650011054d2af39c74be308b135b4908 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 15:42:24 +0800 Subject: [PATCH 09/43] Fix i18n from AppContent --- imports/ui/layouts/AppContent.jsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx index ee3bfb66..8f97b8fd 100644 --- a/imports/ui/layouts/AppContent.jsx +++ b/imports/ui/layouts/AppContent.jsx @@ -1,6 +1,7 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { Switch, Route } from 'react-router-dom'; import PropTypes from 'prop-types'; +import i18n from 'meteor/universe:i18n'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; import UserMenu from '../components/UserMenu.jsx'; import ListList from '../components/ListList.jsx'; @@ -12,6 +13,7 @@ import AuthPageSignIn from '../pages/AuthPageSignIn.jsx'; import AuthPageJoin from '../pages/AuthPageJoin.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import { useMenuOpen } from '../state/MenuOpenState.jsx'; +import { useLocale } from '../state/LocaleState.jsx'; export const AppContent = ({ connexionNotification, @@ -22,6 +24,19 @@ export const AppContent = ({ user, }) => { const [menuOpen, setMenuOpen] = useMenuOpen(); + const [_locale, setLocale] = useLocale(); + + const handleLocaleChange = (newLocale) => { + setLocale(newLocale); + }; + + useEffect(() => { + i18n.onChangeLocale(handleLocaleChange); + return () => { + i18n.offChangeLocale(handleLocaleChange); + } + }, []); + const closeMenu = () => { setMenuOpen(false); }; From 84384409979cbc725f342e377f21c18aef8bc827 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 15:47:25 +0800 Subject: [PATCH 10/43] Fix Redirect import in JoinPage --- imports/ui/pages/AuthPageJoin.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 165a8e24..bb5c0e8e 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { Link } from 'react-router-dom'; +import { Link, Redirect } from 'react-router-dom'; import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; From 6a52fda291a651140bc907307cc5278f56185dcc Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 15:59:18 +0800 Subject: [PATCH 11/43] Get menuOpen through useMenuOpen in AuthPage --- imports/ui/pages/AuthPage.jsx | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/imports/ui/pages/AuthPage.jsx b/imports/ui/pages/AuthPage.jsx index 4a54aca2..59242ccd 100644 --- a/imports/ui/pages/AuthPage.jsx +++ b/imports/ui/pages/AuthPage.jsx @@ -1,24 +1,27 @@ import React from 'react'; import PropTypes from 'prop-types'; import MobileMenu from '../components/MobileMenu.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; // a common layout wrapper for auth pages -const AuthPage = ({ content, link, menuOpen }) => ( -
- -
- {content} - {link} -
-
-); +const AuthPage = ({ content, link }) => { + const [menuOpen] = useMenuOpen(); + return ( +
+ +
+ {content} + {link} +
+
+ ); +} AuthPage.propTypes = { content: PropTypes.element.isRequired, link: PropTypes.element.isRequired, - menuOpen: PropTypes.object.isRequired, }; export default AuthPage; From 5740aa51179d8abbdf0845783dd590c84376222f Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 16:19:19 +0800 Subject: [PATCH 12/43] Clean up JoinPage, SignInPage and AuthPage Move Authpage content to children, remove all unnecessary menuOpen, and a few more --- imports/ui/pages/AuthPage.jsx | 16 ++-- imports/ui/pages/AuthPageJoin.jsx | 119 ++++++++++++++-------------- imports/ui/pages/AuthPageSignIn.jsx | 64 ++++++--------- 3 files changed, 90 insertions(+), 109 deletions(-) diff --git a/imports/ui/pages/AuthPage.jsx b/imports/ui/pages/AuthPage.jsx index 59242ccd..298d4cb2 100644 --- a/imports/ui/pages/AuthPage.jsx +++ b/imports/ui/pages/AuthPage.jsx @@ -1,26 +1,22 @@ import React from 'react'; import PropTypes from 'prop-types'; import MobileMenu from '../components/MobileMenu.jsx'; -import { useMenuOpen } from '../state/MenuOpenState.jsx'; // a common layout wrapper for auth pages -const AuthPage = ({ content, link }) => { - const [menuOpen] = useMenuOpen(); - - return ( +const AuthPage = ({ children, link }) => (
- {content} + {children} {link}
- ); -} +); + AuthPage.propTypes = { - content: PropTypes.element.isRequired, + children: PropTypes.element.isRequired, link: PropTypes.element.isRequired, }; diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index bb5c0e8e..02d9e2bd 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -4,15 +4,14 @@ import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; import AuthPage from './AuthPage.jsx'; -import { useMenuOpen } from '../state/MenuOpenState.jsx'; export const JoinPage = () => { - const [menuOpen] = useMenuOpen(); const [errors, setErrors] = useState({}); const [redirectTo, setRedirectTo] = useState(null); const onSubmit = (event) => { event.preventDefault(); + const email = this.email.value; const password = this.password.value; const confirm = this.confirm.value; @@ -45,64 +44,7 @@ export const JoinPage = () => { } const errorMessages = Object.values(errors); - const errorClass = key => errors[key] && 'error'; - - const content = ( -
-

- {i18n.__('pages.authPageJoin.join')} -

-

- {i18n.__('pages.authPageJoin.joinReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageJoin.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageJoin.password')} - /> - -
-
- { this.confirm = c; }} - placeholder={i18n.__('pages.authPageJoin.confirmPassword')} - /> - -
- -
-
- ); + const errorClass = (key) => errors[key] && 'error'; const link = ( @@ -112,7 +54,62 @@ export const JoinPage = () => { return redirectTo ? - : ; + : +
+

+ {i18n.__('pages.authPageJoin.join')} +

+

+ {i18n.__('pages.authPageJoin.joinReason')} +

+
+
+ {errorMessages.map(msg => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageJoin.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageJoin.password')} + /> + +
+
+ { this.confirm = c; }} + placeholder={i18n.__('pages.authPageJoin.confirmPassword')} + /> + +
+ +
+
+
; }; export default JoinPage; diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index 0f001b37..21b063c6 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -1,21 +1,17 @@ +import React, { useState } from 'react'; +import { Link, Redirect } from 'react-router-dom'; import { Meteor } from 'meteor/meteor'; -import React from 'react'; -import PropTypes from 'prop-types'; -import { Link } from 'react-router-dom'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from '../components/BaseComponent.jsx'; import AuthPage from './AuthPage.jsx'; -class SignInPage extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { errors: {} }); - this.onSubmit = this.onSubmit.bind(this); - } +export const SignInPage = () => { + const [errors, setErrors] = useState({}); + const [redirectTo, setRedirectTo] = useState(null); - onSubmit(event) { + const onSubmit = (event) => { event.preventDefault(); + const email = this.email.value; const password = this.password.value; const errors = {}; @@ -27,28 +23,34 @@ class SignInPage extends BaseComponent { errors.password = i18n.__('pages.authPageSignIn.passwordRequired'); } - this.setState({ errors }); + setErrors(errors); if (Object.keys(errors).length) { return; } Meteor.loginWithPassword(email, password, (err) => { if (err) { - this.setState({ - errors: { none: err.reason }, - }); + if (err) { + setErrors({ none: err.reason }); + } } else { - this.redirectTo('/'); + setRedirectTo('/'); } }); - } + }; + + const errorMessages = Object.values(errors); + const errorClass = (key) => errors[key] && 'error'; - render() { - const { errors } = this.state; - const errorMessages = Object.keys(errors).map(key => errors[key]); - const errorClass = key => errors[key] && 'error'; + const link = ( + + {i18n.__('pages.authPageSignIn.needAccount')} + + ); - const content = ( + return redirectTo + ? + :

{i18n.__('pages.authPageSignIn.signIn')} @@ -56,7 +58,7 @@ class SignInPage extends BaseComponent {

{i18n.__('pages.authPageSignIn.signInReason')}

-
+
{errorMessages.map(msg => (
{msg}
@@ -91,21 +93,7 @@ class SignInPage extends BaseComponent {
- ); - - const link = ( - - {i18n.__('pages.authPageSignIn.needAccount')} - - ); - - return this.renderRedirect() || - ; - } -} - -SignInPage.propTypes = { - menuOpen: PropTypes.object.isRequired, + ; }; export default SignInPage; From 3a4b156a363e56d878f7a847653e007744e93372 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 16:36:10 +0800 Subject: [PATCH 13/43] Remove the named export everytimes it is the same than the default export --- imports/ui/components/MobileMenu.jsx | 2 +- imports/ui/layouts/App.jsx | 4 +- imports/ui/layouts/AppContent.jsx | 10 +- imports/ui/pages/AuthPage.jsx | 16 +-- imports/ui/pages/AuthPageJoin.jsx | 8 +- imports/ui/pages/AuthPageSignIn.jsx | 6 +- imports/ui/pages/ListPage.jsx | 2 +- imports/ui/pages/NotFoundPage.jsx | 2 +- package-lock.json | 207 ++++++++++++++++----------- package.json | 1 + 10 files changed, 149 insertions(+), 109 deletions(-) diff --git a/imports/ui/components/MobileMenu.jsx b/imports/ui/components/MobileMenu.jsx index a2d95882..53e36cd5 100644 --- a/imports/ui/components/MobileMenu.jsx +++ b/imports/ui/components/MobileMenu.jsx @@ -2,7 +2,7 @@ import React from 'react'; import i18n from 'meteor/universe:i18n'; import { useMenuOpen } from '../state/MenuOpenState.jsx'; -export const MobileMenu = () => { +const MobileMenu = () => { const [menuOpen, setMenuOpen] = useMenuOpen(); const toggleMenu = () => { diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index 910eae4c..51561871 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -20,7 +20,7 @@ import AppContent from './AppContent.jsx'; const CONNECTION_ISSUE_TIMEOUT = 5000; -export const App = ({ +const App = ({ // current meteor user user, // server connection status @@ -67,7 +67,7 @@ export const App = ({ renderRedirect.propTypes = { pathname: PropTypes.string.isRequired, }; -/* + /* const renderContent = (location) => { const [menuOpen, setMenuOpen] = useMenuOpen(); const commonChildProps = { diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx index 8f97b8fd..b9bd446d 100644 --- a/imports/ui/layouts/AppContent.jsx +++ b/imports/ui/layouts/AppContent.jsx @@ -15,7 +15,7 @@ import NotFoundPage from '../pages/NotFoundPage.jsx'; import { useMenuOpen } from '../state/MenuOpenState.jsx'; import { useLocale } from '../state/LocaleState.jsx'; -export const AppContent = ({ +const AppContent = ({ connexionNotification, lists, loading, @@ -34,7 +34,7 @@ export const AppContent = ({ i18n.onChangeLocale(handleLocaleChange); return () => { i18n.offChangeLocale(handleLocaleChange); - } + }; }, []); const closeMenu = () => { @@ -42,7 +42,7 @@ export const AppContent = ({ }; const transitionMenuOpen = { get: () => menuOpen, - set: (newMenuOpen) => setMenuOpen(newMenuOpen), + set: newMenuOpen => setMenuOpen(newMenuOpen), }; const commonChildProps = { menuOpen: transitionMenuOpen, @@ -63,7 +63,7 @@ export const AppContent = ({ {loading ? ( ) : ( - + ( -
- -
- {children} - {link} -
+
+ +
+ {children} + {link}
+
); AuthPage.propTypes = { diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 02d9e2bd..d20efc8d 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -5,7 +5,7 @@ import i18n from 'meteor/universe:i18n'; import AuthPage from './AuthPage.jsx'; -export const JoinPage = () => { +const JoinPage = () => { const [errors, setErrors] = useState({}); const [redirectTo, setRedirectTo] = useState(null); @@ -41,10 +41,10 @@ export const JoinPage = () => { } setRedirectTo('/'); }); - } + }; const errorMessages = Object.values(errors); - const errorClass = (key) => errors[key] && 'error'; + const errorClass = key => errors[key] && 'error'; const link = ( @@ -109,7 +109,7 @@ export const JoinPage = () => {
- ; + ; }; export default JoinPage; diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index 21b063c6..6c9ba7b0 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -5,7 +5,7 @@ import i18n from 'meteor/universe:i18n'; import AuthPage from './AuthPage.jsx'; -export const SignInPage = () => { +const SignInPage = () => { const [errors, setErrors] = useState({}); const [redirectTo, setRedirectTo] = useState(null); @@ -40,7 +40,7 @@ export const SignInPage = () => { }; const errorMessages = Object.values(errors); - const errorClass = (key) => errors[key] && 'error'; + const errorClass = key => errors[key] && 'error'; const link = ( @@ -93,7 +93,7 @@ export const SignInPage = () => {

-
; +
; }; export default SignInPage; diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index c5b9bb32..86c2c13c 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -8,7 +8,7 @@ import NotFoundPage from '../pages/NotFoundPage.jsx'; import Message from '../components/Message.jsx'; import { useMenuOpen } from '../state/MenuOpenState'; -export const ListPage = ({ +const ListPage = ({ list, todos, loading, diff --git a/imports/ui/pages/NotFoundPage.jsx b/imports/ui/pages/NotFoundPage.jsx index 3f8187ea..e728e02e 100644 --- a/imports/ui/pages/NotFoundPage.jsx +++ b/imports/ui/pages/NotFoundPage.jsx @@ -3,7 +3,7 @@ import i18n from 'meteor/universe:i18n'; import MobileMenu from '../components/MobileMenu.jsx'; import Message from '../components/Message.jsx'; -export const NotFoundPage = () => ( +const NotFoundPage = () => (
); @@ -99,13 +99,14 @@ const AppContent = ({ AppContent.propTypes = { connexionNotification: PropTypes.bool, - lists: PropTypes.array, + lists: PropTypes.array.isRequired, loading: PropTypes.bool.isRequired, location: PropTypes.shape({ pathname: PropTypes.string.isRequired, + key: PropTypes.string.isRequired, }).isRequired, logout: PropTypes.func.isRequired, - user: PropTypes.object, + user: PropTypes.object.isRequired, }; AppContent.defaultProps = { From 9bd1fc0fb5e68b987d987b885eb25bd9bf233c73 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 16:44:55 +0800 Subject: [PATCH 15/43] Clean up JoinPage and SignInPage --- imports/ui/pages/AuthPageJoin.jsx | 126 ++++++++++++++-------------- imports/ui/pages/AuthPageSignIn.jsx | 100 +++++++++++----------- 2 files changed, 115 insertions(+), 111 deletions(-) diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index d20efc8d..28422cbf 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -15,20 +15,20 @@ const JoinPage = () => { const email = this.email.value; const password = this.password.value; const confirm = this.confirm.value; - const errors = {}; + const newErrors = {}; if (!email) { - errors.email = i18n.__('pages.authPageJoin.emailRequired'); + newErrors.email = i18n.__('pages.authPageJoin.emailRequired'); } if (!password) { - errors.password = i18n.__('pages.authPageJoin.passwordRequired'); + newErrors.password = i18n.__('pages.authPageJoin.passwordRequired'); } if (confirm !== password) { - errors.confirm = i18n.__('pages.authPageJoin.passwordConfirm'); + newErrors.confirm = i18n.__('pages.authPageJoin.passwordConfirm'); } - setErrors(errors); - if (Object.keys(errors).length) { + setErrors(newErrors); + if (Object.keys(newErrors).length) { return; } @@ -54,62 +54,64 @@ const JoinPage = () => { return redirectTo ? - : -
-

- {i18n.__('pages.authPageJoin.join')} -

-

- {i18n.__('pages.authPageJoin.joinReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageJoin.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageJoin.password')} - /> - -
-
- { this.confirm = c; }} - placeholder={i18n.__('pages.authPageJoin.confirmPassword')} - /> - -
- -
-
-
; + : ( + +
+

+ {i18n.__('pages.authPageJoin.join')} +

+

+ {i18n.__('pages.authPageJoin.joinReason')} +

+
+
+ {errorMessages.map(msg => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageJoin.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageJoin.password')} + /> + +
+
+ { this.confirm = c; }} + placeholder={i18n.__('pages.authPageJoin.confirmPassword')} + /> + +
+ +
+
+
+ ); }; export default JoinPage; diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index 6c9ba7b0..4163aff2 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -14,17 +14,17 @@ const SignInPage = () => { const email = this.email.value; const password = this.password.value; - const errors = {}; + const newErrors = {}; if (!email) { - errors.email = i18n.__('pages.authPageSignIn.emailRequired'); + newErrors.email = i18n.__('pages.authPageSignIn.emailRequired'); } if (!password) { - errors.password = i18n.__('pages.authPageSignIn.passwordRequired'); + newErrors.password = i18n.__('pages.authPageSignIn.passwordRequired'); } - setErrors(errors); - if (Object.keys(errors).length) { + setErrors(newErrors); + if (Object.keys(newErrors).length) { return; } @@ -50,50 +50,52 @@ const SignInPage = () => { return redirectTo ? - : -
-

- {i18n.__('pages.authPageSignIn.signIn')} -

-

- {i18n.__('pages.authPageSignIn.signInReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageSignIn.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageSignIn.password')} - /> - -
- -
-
-
; + : ( + +
+

+ {i18n.__('pages.authPageSignIn.signIn')} +

+

+ {i18n.__('pages.authPageSignIn.signInReason')} +

+
+
+ {errorMessages.map(msg => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageSignIn.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageSignIn.password')} + /> + +
+ +
+
+
+ ); }; export default SignInPage; From 97ca906f64d02fff2b7ab8435249460f0f868bd0 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 16:48:15 +0800 Subject: [PATCH 16/43] Remove commented lines in App --- imports/ui/layouts/App.jsx | 58 -------------------------------------- 1 file changed, 58 deletions(-) diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index 4a5ca323..08e01d30 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -56,65 +56,7 @@ const App = ({ renderRedirect.propTypes = { pathname: PropTypes.string.isRequired, }; - /* - const renderContent = (location) => { - const [menuOpen, setMenuOpen] = useMenuOpen(); - const commonChildProps = { - menuOpen, - }; - const closeMenu = () => { - setMenuOpen(false); - }; - return ( -
- - {showConnectionIssue && !connected - ? - : null} -
-
- {loading ? ( - - ) : ( - - - - ( - - )} - /> - } - /> - } - /> - } - /> - - - - )} -
-
- ); - }; - */ return ( From deec95fa6d1521d8ad2c602321cc3636c74d876b Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 17:32:09 +0800 Subject: [PATCH 17/43] Transform LanguageToggle in FC --- imports/ui/components/LanguageToggle.jsx | 82 +++++++++++------------- 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/imports/ui/components/LanguageToggle.jsx b/imports/ui/components/LanguageToggle.jsx index 1217ad77..a3d334e4 100644 --- a/imports/ui/components/LanguageToggle.jsx +++ b/imports/ui/components/LanguageToggle.jsx @@ -1,61 +1,51 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; import getLanguages from '../../api/languages/methods'; +import { useLocale } from '../state/LocaleState.jsx'; -class LanguageToggle extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { languages: [] }); - } +const LanguageToggle = () => { + const [languages, setLanguages] = useState([]); + const [locale] = useLocale(); - componentDidMount() { - getLanguages.call((error, languages) => { + useEffect(() => { + getLanguages.call((error, newLanguages) => { if (!error) { - this.setState({ - languages, - }); + setLanguages(newLanguages); } }); - } + }, []); - setLocale(event, language) { + const setI18nLocale = (event, language) => { event.preventDefault(); if (language) { i18n.setLocale(language); } - } + }; - renderLanguages() { - return this.state.languages.map((language) => { - let content; - if (language === this.state.locale) { - content = ( - {language} - ); - } else { - content = ( - this.setLocale(event, language)} - > - {language} - - ); - } - return content; - }); - } - - render() { - return ( -
- {this.renderLanguages()} -
- ); - } -} + return ( +
+ {languages.map((language) => { + let content; + if (language === locale) { + content = ( + {language} + ); + } else { + content = ( + setI18nLocale(event, language)} + > + {language} + + ); + } + return content; + })} +
+ ); +}; export default LanguageToggle; From ae207fa298b233d3a5cbb43910bf5c61e29106c0 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 17:33:35 +0800 Subject: [PATCH 18/43] Truncate locale in LocaleState to get the short syntax --- imports/ui/state/LocaleState.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx index 7636b543..7de96b3c 100644 --- a/imports/ui/state/LocaleState.jsx +++ b/imports/ui/state/LocaleState.jsx @@ -19,7 +19,7 @@ const useLocale = () => { }; const LocaleProvider = (props) => { - const [locale, setLocale] = useState(i18n.getLocale()); + const [locale, setLocale] = useState(i18n.getLocale().substr(0, 2)); const value = useMemo(() => [locale, setLocale], [locale]); return ; From 0a25690236508b654a1ed607da9567561d8e3c62 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 17:55:54 +0800 Subject: [PATCH 19/43] Add missing .js/.jsx extension to 3 imports --- imports/ui/components/LanguageToggle.jsx | 2 +- imports/ui/pages/ListPage.jsx | 2 +- imports/ui/state/GlobalStateProvider.jsx | 8 ++++---- imports/ui/state/MenuOpenState.jsx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/imports/ui/components/LanguageToggle.jsx b/imports/ui/components/LanguageToggle.jsx index a3d334e4..c290598f 100644 --- a/imports/ui/components/LanguageToggle.jsx +++ b/imports/ui/components/LanguageToggle.jsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import i18n from 'meteor/universe:i18n'; -import getLanguages from '../../api/languages/methods'; +import getLanguages from '../../api/languages/methods.js'; import { useLocale } from '../state/LocaleState.jsx'; const LanguageToggle = () => { diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index 86c2c13c..6b3453e6 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -6,7 +6,7 @@ import ListHeader from '../components/ListHeader.jsx'; import TodoItem from '../components/TodoItem.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import Message from '../components/Message.jsx'; -import { useMenuOpen } from '../state/MenuOpenState'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; const ListPage = ({ list, diff --git a/imports/ui/state/GlobalStateProvider.jsx b/imports/ui/state/GlobalStateProvider.jsx index 4a29d172..43e66cee 100644 --- a/imports/ui/state/GlobalStateProvider.jsx +++ b/imports/ui/state/GlobalStateProvider.jsx @@ -1,12 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { LocaleProvider } from './LocaleState'; -import { MenuOpenProvider } from './MenuOpenState'; +import { LocaleProvider } from './LocaleState.jsx'; +import { MenuOpenProvider } from './MenuOpenState.jsx'; export const GlobalStateProvider = ({ menuOpen, - ...props, + ...props }) => ( @@ -19,4 +19,4 @@ GlobalStateProvider.propTypes = { GlobalStateProvider.defaultProps = { menuOpen: false, -}; \ No newline at end of file +}; diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx index 16898c08..aab24c43 100644 --- a/imports/ui/state/MenuOpenState.jsx +++ b/imports/ui/state/MenuOpenState.jsx @@ -20,7 +20,7 @@ const useMenuOpen = () => { const MenuOpenProvider = ({ menuOpen: initMenuOpen, - ...props, + ...props }) => { const [menuOpen, setMenuOpen] = useState(initMenuOpen); const value = useMemo(() => [menuOpen, setMenuOpen], [menuOpen]); From 138cca9512bf662ff6732ab5150c351c78a99948 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 17:59:01 +0800 Subject: [PATCH 20/43] Remove menuOpen from containers --- imports/ui/containers/AppContainer.jsx | 3 --- imports/ui/containers/ListPageContainer.jsx | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/imports/ui/containers/AppContainer.jsx b/imports/ui/containers/AppContainer.jsx index 46b4f5f3..17d6882e 100644 --- a/imports/ui/containers/AppContainer.jsx +++ b/imports/ui/containers/AppContainer.jsx @@ -5,8 +5,6 @@ import { withTracker } from 'meteor/react-meteor-data'; import { Lists } from '../../api/lists/lists.js'; import App from '../layouts/App.jsx'; -const menuOpen = new ReactiveVar(false); - const AppContainer = withTracker(() => { const publicHandle = Meteor.subscribe('lists.public'); const privateHandle = Meteor.subscribe('lists.private'); @@ -14,7 +12,6 @@ const AppContainer = withTracker(() => { user: Meteor.user(), loading: !(publicHandle.ready() && privateHandle.ready()), connected: Meteor.status().connected, - menuOpen, lists: Lists.find({ $or: [ { userId: { $exists: false } }, diff --git a/imports/ui/containers/ListPageContainer.jsx b/imports/ui/containers/ListPageContainer.jsx index 2aa9ec5a..44773087 100644 --- a/imports/ui/containers/ListPageContainer.jsx +++ b/imports/ui/containers/ListPageContainer.jsx @@ -3,7 +3,7 @@ import { withTracker } from 'meteor/react-meteor-data'; import { Lists } from '../../api/lists/lists.js'; import ListPage from '../pages/ListPage.jsx'; -const ListPageContainer = withTracker(({ match, menuOpen }) => { +const ListPageContainer = withTracker(({ match }) => { const { id } = match.params; const todosHandle = Meteor.subscribe('todos.inList', { listId: id }); const loading = !todosHandle.ready(); @@ -14,7 +14,6 @@ const ListPageContainer = withTracker(({ match, menuOpen }) => { list, listExists, todos: listExists ? list.todos().fetch() : [], - menuOpen, }; })(ListPage); From 7167b830434fbbe5544be0ea8a70f4a71f8a5fad Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 18:21:58 +0800 Subject: [PATCH 21/43] Fix ListPage and ListHeader PropTypes --- imports/ui/components/ListHeader.jsx | 11 ++++++++++- imports/ui/pages/ListPage.jsx | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index 41bfd32a..d79c498c 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -216,6 +216,15 @@ export default class ListHeader extends BaseComponent { } ListHeader.propTypes = { - list: PropTypes.object, + list: PropTypes.shape({ + _id: PropTypes.string.isRequired, + userId: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + incompleteCount: PropTypes.number.isRequired, + }), menuOpen: PropTypes.object.isRequired, }; + +ListHeader.defaultProps = { + list: {}, +}; diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index 6b3453e6..f64190ad 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -57,10 +57,19 @@ const ListPage = ({ }; ListPage.propTypes = { - list: PropTypes.object, - todos: PropTypes.array, - loading: PropTypes.bool, - listExists: PropTypes.bool, + list: PropTypes.shape({ + _id: PropTypes.string.isRequired, + userId: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + incompleteCount: PropTypes.number.isRequired, + }), + todos: PropTypes.array.isRequired, + loading: PropTypes.bool.isRequired, + listExists: PropTypes.bool.isRequired, +}; + +ListPage.defaultProps = { + list: {}, }; export default ListPage; From e686ce75f875f864d8515cb60299428713ab44fd Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Wed, 30 Oct 2019 18:25:34 +0800 Subject: [PATCH 22/43] Remove unnecessary ReactiveVar import in AppContainer --- imports/ui/containers/AppContainer.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/imports/ui/containers/AppContainer.jsx b/imports/ui/containers/AppContainer.jsx index 17d6882e..9d2103d6 100644 --- a/imports/ui/containers/AppContainer.jsx +++ b/imports/ui/containers/AppContainer.jsx @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor'; -import { ReactiveVar } from 'meteor/reactive-var'; import { withTracker } from 'meteor/react-meteor-data'; import { Lists } from '../../api/lists/lists.js'; From 14e9c26f1f85f99207ce609271da2563e451cab8 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 09:30:42 +0800 Subject: [PATCH 23/43] Transform ListHeader in FC + rename confirm in JoinPage to re-enable native confirm dialog --- imports/ui/components/ListHeader.jsx | 287 +++++++++++++-------------- imports/ui/pages/AuthPageJoin.jsx | 12 +- 2 files changed, 140 insertions(+), 159 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index d79c498c..bfd2d42e 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -1,11 +1,12 @@ /* global confirm */ /* eslint-disable no-alert, no-restricted-globals */ -import React from 'react'; +import React, { useState } from 'react'; +import { Redirect } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; import MobileMenu from './MobileMenu.jsx'; +import { useMenuOpen } from '../state/MenuOpenState.jsx'; import { displayError } from '../helpers/errors.js'; import { @@ -16,204 +17,183 @@ import { } from '../../api/lists/methods.js'; import { insert } from '../../api/todos/methods.js'; -export default class ListHeader extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { editing: false }); - this.onListFormSubmit = this.onListFormSubmit.bind(this); - this.onListInputKeyUp = this.onListInputKeyUp.bind(this); - this.onListInputBlur = this.onListInputBlur.bind(this); - this.onListDropdownAction = this.onListDropdownAction.bind(this); - this.editList = this.editList.bind(this); - this.cancelEdit = this.cancelEdit.bind(this); - this.saveList = this.saveList.bind(this); - this.deleteList = this.deleteList.bind(this); - this.toggleListPrivacy = this.toggleListPrivacy.bind(this); - this.createTodo = this.createTodo.bind(this); - this.focusTodoInput = this.focusTodoInput.bind(this); - } - - onListFormSubmit(event) { - event.preventDefault(); - this.saveList(); - } +const ListHeader = ({ list }) => { + const [editing, setEditing] = useState(false); + const [redirectTo, setRedirectTo] = useState(null); + const menuOpen = useMenuOpen(); - onListInputKeyUp(event) { - if (event.keyCode === 27) { - this.cancelEdit(); - } - } - - onListInputBlur() { - if (this.state.editing) { - this.saveList(); - } - } - - onListDropdownAction(event) { - if (event.target.value === 'delete') { - this.deleteList(); - } else { - this.toggleListPrivacy(); - } - } - - editList() { + const editList = () => { this.setState({ editing: true }, () => { this.listNameInput.focus(); }); - } + }; - cancelEdit() { - this.setState({ editing: false }); - } + const cancelEdit = () => { + setEditing(false); + }; - saveList() { - this.setState({ editing: false }); + const saveList = () => { + setEditing(false); updateName.call({ - listId: this.props.list._id, + listId: list._id, newName: this.listNameInput.value, }, displayError); - } + }; - deleteList() { - const { list } = this.props; + const deleteList = () => { const message = `${i18n.__('components.listHeader.deleteConfirm')} ${list.name}?`; if (confirm(message)) { remove.call({ listId: list._id }, displayError); - this.redirectTo('/'); + setRedirectTo('/'); + } + }; + + const onListFormSubmit = (event) => { + event.preventDefault(); + saveList(); + }; + + const onListInputKeyUp = (event) => { + if (event.keyCode === 27) { + cancelEdit(); + } + }; + + const onListInputBlur = () => { + if (editing) { + saveList(); } - } + }; - toggleListPrivacy() { - const { list } = this.props; + const toggleListPrivacy = () => { if (list.userId) { makePublic.call({ listId: list._id }, displayError); } else { makePrivate.call({ listId: list._id }, displayError); } - } + }; - createTodo(event) { + const onListDropdownAction = (event) => { + if (event.target.value === 'delete') { + deleteList(); + } else { + toggleListPrivacy(); + } + }; + + const createTodo = (event) => { event.preventDefault(); const input = this.newTodoInput; if (input.value.trim()) { insert.call({ - listId: this.props.list._id, + listId: list._id, text: input.value, }, displayError); input.value = ''; } - } + }; - focusTodoInput() { + const focusTodoInput = () => { this.newTodoInput.focus(); - } - - renderDefaultHeader() { - const { list } = this.props; - return ( -
- -

- {list.name} - {list.incompleteCount} -

-
-
- - -
- -
-
- ); - } - - renderEditingHeader() { - const { list } = this.props; - return ( -
- { this.listNameInput = c; }} - defaultValue={list.name} - onKeyUp={this.onListInputKeyUp} - onBlur={this.onListInputBlur} - /> -
- ( + + ); + + const renderEditingHeader = () => ( +
+ { this.listNameInput = c; }} + defaultValue={list.name} + onKeyUp={onListInputKeyUp} + onBlur={onListInputBlur} + /> +
+ + + +
+
+ ); - render() { - const { editing } = this.state; - return this.renderRedirect() || ( + return redirectTo + ? + : ( ); - } -} +}; ListHeader.propTypes = { list: PropTypes.shape({ @@ -222,9 +202,10 @@ ListHeader.propTypes = { name: PropTypes.string.isRequired, incompleteCount: PropTypes.number.isRequired, }), - menuOpen: PropTypes.object.isRequired, }; ListHeader.defaultProps = { list: {}, }; + +export default ListHeader; diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 28422cbf..751477ab 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -14,7 +14,7 @@ const JoinPage = () => { const email = this.email.value; const password = this.password.value; - const confirm = this.confirm.value; + const confirmPassword = this.confirmPassword.value; const newErrors = {}; if (!email) { @@ -23,8 +23,8 @@ const JoinPage = () => { if (!password) { newErrors.password = i18n.__('pages.authPageJoin.passwordRequired'); } - if (confirm !== password) { - newErrors.confirm = i18n.__('pages.authPageJoin.passwordConfirm'); + if (confirmPassword !== password) { + newErrors.confirmPassword = i18n.__('pages.authPageJoin.passwordConfirm'); } setErrors(newErrors); @@ -93,11 +93,11 @@ const JoinPage = () => { title={i18n.__('pages.authPageJoin.password')} />
-
+
{ this.confirm = c; }} + name="confirmPassword" + ref={(c) => { this.confirmPassword = c; }} placeholder={i18n.__('pages.authPageJoin.confirmPassword')} /> Date: Thu, 31 Oct 2019 11:12:08 +0800 Subject: [PATCH 24/43] Transform ListList in FC --- imports/ui/components/ListList.jsx | 41 +++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/imports/ui/components/ListList.jsx b/imports/ui/components/ListList.jsx index 64b68fa0..0ce57abe 100644 --- a/imports/ui/components/ListList.jsx +++ b/imports/ui/components/ListList.jsx @@ -1,34 +1,34 @@ /* global alert */ -import React from 'react'; +import React, { useEffect, useState } from 'react'; +import { NavLink, Redirect } from 'react-router-dom'; import PropTypes from 'prop-types'; -import { NavLink } from 'react-router-dom'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; import { insert } from '../../api/lists/methods.js'; -export default class ListList extends BaseComponent { - constructor(props) { - super(props); - this.createNewList = this.createNewList.bind(this); - } +const ListList = ({ lists }) => { + const [redirectTo, setRedirectTo] = useState(null); - createNewList() { + useEffect(() => { + setRedirectTo(null); + }, [redirectTo]); + + const createNewList = () => { const listId = insert.call({ locale: i18n.getLocale() }, (err) => { if (err) { - this.redirectTo('/'); + setRedirectTo('/'); /* eslint-disable no-alert */ alert(i18n.__('components.listList.newListError')); } }); - this.redirectTo(`/lists/${listId}`); - } + setRedirectTo(`/lists/${listId}`); + }; - render() { - const { lists } = this.props; - return this.renderRedirect() || ( + return redirectTo + ? + : (
- + {i18n.__('components.listList.newList')} @@ -51,9 +51,14 @@ export default class ListList extends BaseComponent { ))}
); - } -} +}; ListList.propTypes = { lists: PropTypes.array, }; + +ListList.defaultProps = { + lists: [], +}; + +export default ListList; From 2606fc436ca13d361bca2dbf3df5afbdf9fb71e4 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:14:58 +0800 Subject: [PATCH 25/43] Reset redirectTo with useEffect in JoinPage, SignInPage and ListHeader --- imports/ui/components/ListHeader.jsx | 6 +++++- imports/ui/pages/AuthPageJoin.jsx | 6 +++++- imports/ui/pages/AuthPageSignIn.jsx | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index bfd2d42e..a55ab9e1 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -1,7 +1,7 @@ /* global confirm */ /* eslint-disable no-alert, no-restricted-globals */ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Redirect } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; @@ -22,6 +22,10 @@ const ListHeader = ({ list }) => { const [redirectTo, setRedirectTo] = useState(null); const menuOpen = useMenuOpen(); + useEffect(() => { + setRedirectTo(null); + }, [redirectTo]); + const editList = () => { this.setState({ editing: true }, () => { this.listNameInput.focus(); diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 751477ab..90f11411 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Link, Redirect } from 'react-router-dom'; import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; @@ -9,6 +9,10 @@ const JoinPage = () => { const [errors, setErrors] = useState({}); const [redirectTo, setRedirectTo] = useState(null); + useEffect(() => { + setRedirectTo(null); + }, [redirectTo]); + const onSubmit = (event) => { event.preventDefault(); diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index 4163aff2..ab28c2c1 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Link, Redirect } from 'react-router-dom'; import { Meteor } from 'meteor/meteor'; import i18n from 'meteor/universe:i18n'; @@ -9,6 +9,10 @@ const SignInPage = () => { const [errors, setErrors] = useState({}); const [redirectTo, setRedirectTo] = useState(null); + useEffect(() => { + setRedirectTo(null); + }, [redirectTo]); + const onSubmit = (event) => { event.preventDefault(); From ebbf369351150b9deee5959317a1a97f7ff40eb9 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:20:50 +0800 Subject: [PATCH 26/43] Fix PropTypes in AppContent, ListPage and ListHeader --- imports/ui/components/ListHeader.jsx | 2 +- imports/ui/layouts/AppContent.jsx | 5 +++-- imports/ui/pages/ListPage.jsx | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index a55ab9e1..3a868157 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -202,7 +202,7 @@ const ListHeader = ({ list }) => { ListHeader.propTypes = { list: PropTypes.shape({ _id: PropTypes.string.isRequired, - userId: PropTypes.string.isRequired, + userId: PropTypes.string, name: PropTypes.string.isRequired, incompleteCount: PropTypes.number.isRequired, }), diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx index 000cf7d5..035309f7 100644 --- a/imports/ui/layouts/AppContent.jsx +++ b/imports/ui/layouts/AppContent.jsx @@ -103,14 +103,15 @@ AppContent.propTypes = { loading: PropTypes.bool.isRequired, location: PropTypes.shape({ pathname: PropTypes.string.isRequired, - key: PropTypes.string.isRequired, + key: PropTypes.string, }).isRequired, logout: PropTypes.func.isRequired, - user: PropTypes.object.isRequired, + user: PropTypes.object, }; AppContent.defaultProps = { connexionNotification: false, + user: null, }; export default AppContent; diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index f64190ad..6934aaf0 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -59,7 +59,7 @@ const ListPage = ({ ListPage.propTypes = { list: PropTypes.shape({ _id: PropTypes.string.isRequired, - userId: PropTypes.string.isRequired, + userId: PropTypes.string, name: PropTypes.string.isRequired, incompleteCount: PropTypes.number.isRequired, }), From 78d1a60852083f5fa909a6067e57c098cfdf532a Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:21:28 +0800 Subject: [PATCH 27/43] Transform Loading in FC --- imports/ui/components/Loading.jsx | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/imports/ui/components/Loading.jsx b/imports/ui/components/Loading.jsx index 1ba6f652..542187d8 100644 --- a/imports/ui/components/Loading.jsx +++ b/imports/ui/components/Loading.jsx @@ -1,17 +1,12 @@ import React from 'react'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; -class Loading extends BaseComponent { - render() { - return ( - {i18n.__('components.loading.loading')} - ); - } -} +const Loading = () => ( + {i18n.__('components.loading.loading')} +); export default Loading; From ae8e7630c8d90f9ad3937d85a538d1321dd76dad Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:35:51 +0800 Subject: [PATCH 28/43] Display Loading instead of NotFound when loading in ListPage --- imports/ui/pages/ListPage.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index 6934aaf0..74b0d7f9 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -7,6 +7,7 @@ import TodoItem from '../components/TodoItem.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import Message from '../components/Message.jsx'; import { useMenuOpen } from '../state/MenuOpenState.jsx'; +import Loading from '../components/Loading.jsx'; const ListPage = ({ list, @@ -22,6 +23,9 @@ const ListPage = ({ }; if (!listExists) { + if (loading) { + return ; + } return ; } From aed46c18ea1c583dff64828bb85c29a93c500a0d Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:47:40 +0800 Subject: [PATCH 29/43] Transform TodoItem in FC --- imports/ui/components/TodoItem.jsx | 151 +++++++++++++++-------------- 1 file changed, 76 insertions(+), 75 deletions(-) diff --git a/imports/ui/components/TodoItem.jsx b/imports/ui/components/TodoItem.jsx index 5aafec0c..7cf91a79 100644 --- a/imports/ui/components/TodoItem.jsx +++ b/imports/ui/components/TodoItem.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import { _ } from 'meteor/underscore'; import classnames from 'classnames'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; import { displayError } from '../helpers/errors.js'; import { @@ -12,92 +11,94 @@ import { remove, } from '../../api/todos/methods.js'; -export default class TodoItem extends BaseComponent { - constructor(props) { - super(props); - this.throttledUpdate = _.throttle((value) => { - if (value) { - updateText.call({ - todoId: this.props.todo._id, - newText: value, - }, displayError); - } - }, 300); +const TodoItem = ({ + todo, + editing, + onEditingChange, +}) => { + const throttledUpdate = _.throttle((value) => { + if (value) { + updateText.call({ + todoId: todo._id, + newText: value, + }, displayError); + } + }, 300); - this.setTodoCheckStatus = this.setTodoCheckStatus.bind(this); - this.updateTodo = this.updateTodo.bind(this); - this.deleteTodo = this.deleteTodo.bind(this); - this.onFocus = this.onFocus.bind(this); - this.onBlur = this.onBlur.bind(this); - } + const onFocus = () => { + onEditingChange(todo._id, true); + }; - onFocus() { - this.props.onEditingChange(this.props.todo._id, true); - } + const onBlur = () => { + onEditingChange(todo._id, false); + }; - onBlur() { - this.props.onEditingChange(this.props.todo._id, false); - } - - setTodoCheckStatus(event) { + const setTodoCheckStatus = (event) => { setCheckedStatus.call({ - todoId: this.props.todo._id, + todoId: todo._id, newCheckedStatus: event.target.checked, }); - } - - updateTodo(event) { - this.throttledUpdate(event.target.value); - } + }; - deleteTodo() { - remove.call({ todoId: this.props.todo._id }, displayError); - } + const updateTodo = (event) => { + throttledUpdate(event.target.value); + }; - render() { - const { todo, editing } = this.props; - const todoClass = classnames({ - 'list-item': true, - checked: todo.checked, - editing, - }); + const deleteTodo = () => { + remove.call({ todoId: todo._id }, displayError); + }; - return ( -
- + return ( +
+
- ); - } -} + + + + + + +
+ ); +}; TodoItem.propTypes = { - todo: PropTypes.object, + todo: PropTypes.shape({ + _id: PropTypes.string.isRequired, + checked: PropTypes.bool, + text: PropTypes.string, + }).isRequired, editing: PropTypes.bool, - onEditingChange: PropTypes.func, + onEditingChange: PropTypes.func.isRequired, +}; + +TodoItem.defaultProps = { + editing: false, }; + +export default TodoItem; From 490eae409ae779303dc7b7cd82f682c00725f588 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 11:52:38 +0800 Subject: [PATCH 30/43] Transform UserMenu in FC --- imports/ui/components/UserMenu.jsx | 63 +++++++++++++----------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/imports/ui/components/UserMenu.jsx b/imports/ui/components/UserMenu.jsx index 7f458ce8..9c1c7614 100644 --- a/imports/ui/components/UserMenu.jsx +++ b/imports/ui/components/UserMenu.jsx @@ -1,33 +1,26 @@ -import React from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import i18n from 'meteor/universe:i18n'; -import BaseComponent from './BaseComponent.jsx'; -export default class UserMenu extends BaseComponent { - constructor(props) { - super(props); - this.state = Object.assign(this.state, { open: false }); - this.toggle = this.toggle.bind(this); - } +const UserMenu = ({ + user, logout, +}) => { + const [open, setOpen] = useState(); - toggle(e) { + const toggle = (e) => { e.preventDefault(); e.stopPropagation(); - this.setState({ - open: !this.state.open, - }); - } + setOpen(!open); + }; - renderLoggedIn() { - const { open } = this.state; - const { user, logout } = this.props; + const renderLoggedIn = () => { const email = user.emails[0].address; const emailLocalPart = email.substring(0, email.indexOf('@')); return ( ); - } + }; - renderLoggedOut() { - return ( -
- - {i18n.__('components.userMenu.login')} - - - {i18n.__('components.userMenu.join')} - -
- ); - } + const renderLoggedOut = () => ( +
+ + {i18n.__('components.userMenu.login')} + + + {i18n.__('components.userMenu.join')} + +
+ ); - render() { - return this.props.user - ? this.renderLoggedIn() - : this.renderLoggedOut(); - } -} + return user + ? renderLoggedIn() + : renderLoggedOut(); +}; UserMenu.propTypes = { user: PropTypes.object, logout: PropTypes.func, }; + +export default UserMenu; From 66d39a078194a5910881333113b67b4e841bb796 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 13:10:09 +0800 Subject: [PATCH 31/43] Delete now unused BaseComponent --- imports/ui/components/BaseComponent.jsx | 44 ------------------------- 1 file changed, 44 deletions(-) delete mode 100644 imports/ui/components/BaseComponent.jsx diff --git a/imports/ui/components/BaseComponent.jsx b/imports/ui/components/BaseComponent.jsx deleted file mode 100644 index dc44e693..00000000 --- a/imports/ui/components/BaseComponent.jsx +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable react/no-unused-state */ - -import React, { Component } from 'react'; -import { Redirect } from 'react-router-dom'; -import i18n from 'meteor/universe:i18n'; - -class BaseComponent extends Component { - static getDerivedStateFromProps() { - return { redirectTo: null }; - } - - constructor(props) { - super(props); - this.state = { - locale: i18n.getLocale(), - redirectTo: null, - }; - this.handleLocaleChange = this.handleLocaleChange.bind(this); - } - - componentDidMount() { - i18n.onChangeLocale(this.handleLocaleChange); - } - - componentWillUnmount() { - i18n.offChangeLocale(this.handleLocaleChange); - } - - handleLocaleChange(locale) { - this.setState({ locale }); - } - - redirectTo(path) { - this.setState({ redirectTo: path }); - } - - renderRedirect() { - return this.state.redirectTo - ? - : null; - } -} - -export default BaseComponent; From 6102b6fca53477da61d965010c8ddf340add531f Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Thu, 31 Oct 2019 13:13:24 +0800 Subject: [PATCH 32/43] Remove all unnecessary menuOpen mentions and props in ListHeader and ListPage --- imports/ui/components/ListHeader.jsx | 4 +--- imports/ui/pages/ListPage.jsx | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index 3a868157..3dd0d61d 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -6,7 +6,6 @@ import { Redirect } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; import MobileMenu from './MobileMenu.jsx'; -import { useMenuOpen } from '../state/MenuOpenState.jsx'; import { displayError } from '../helpers/errors.js'; import { @@ -20,7 +19,6 @@ import { insert } from '../../api/todos/methods.js'; const ListHeader = ({ list }) => { const [editing, setEditing] = useState(false); const [redirectTo, setRedirectTo] = useState(null); - const menuOpen = useMenuOpen(); useEffect(() => { setRedirectTo(null); @@ -105,7 +103,7 @@ const ListHeader = ({ list }) => { const renderDefaultHeader = () => (
- +

{list.name} {list.incompleteCount} diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index 74b0d7f9..b4f80a69 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -6,7 +6,6 @@ import ListHeader from '../components/ListHeader.jsx'; import TodoItem from '../components/TodoItem.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import Message from '../components/Message.jsx'; -import { useMenuOpen } from '../state/MenuOpenState.jsx'; import Loading from '../components/Loading.jsx'; const ListPage = ({ @@ -15,7 +14,6 @@ const ListPage = ({ loading, listExists, }) => { - const [menuOpen] = useMenuOpen(); const [editingTodo, setEditingTodo] = useState(null); const onEditingChange = (id, editing) => { @@ -50,7 +48,7 @@ const ListPage = ({ return (
- +
{loading ? From 7ac6fcb0c6338a4aa25c4f1f715794eb7f924c9a Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Fri, 8 Nov 2019 17:33:04 +0800 Subject: [PATCH 33/43] Remove transitionMenuOpen, commonChildProps and Route render fonctions Following @HorusGoul suggestions --- imports/ui/layouts/AppContent.jsx | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx index 035309f7..c0a21c85 100644 --- a/imports/ui/layouts/AppContent.jsx +++ b/imports/ui/layouts/AppContent.jsx @@ -40,13 +40,6 @@ const AppContent = ({ const closeMenu = () => { setMenuOpen(false); }; - const transitionMenuOpen = { - get: () => menuOpen, - set: newMenuOpen => setMenuOpen(newMenuOpen), - }; - const commonChildProps = { - menuOpen: transitionMenuOpen, - }; return (
@@ -72,21 +65,19 @@ const AppContent = ({ ( - - )} + component={ListPageContainer} /> } + component={AuthPageSignIn} /> } + component={AuthPageJoin} /> } + component={NotFoundPage} /> From 777c5d4185340b4e2b97c59f9f9b4079760d1d1f Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Fri, 8 Nov 2019 17:35:30 +0800 Subject: [PATCH 34/43] Remove useMemo from global state managers And extract i18n call following @HorusGoul suggestions --- imports/ui/state/LocaleState.jsx | 6 +++--- imports/ui/state/MenuOpenState.jsx | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx index 7de96b3c..a4194142 100644 --- a/imports/ui/state/LocaleState.jsx +++ b/imports/ui/state/LocaleState.jsx @@ -1,11 +1,12 @@ import React, { createContext, useContext, - useMemo, useState, } from 'react'; import i18n from 'meteor/universe:i18n'; +const defaultLocale = i18n.getLocale().substr(0, 2); + const LocaleContext = createContext(undefined); const useLocale = () => { @@ -19,8 +20,7 @@ const useLocale = () => { }; const LocaleProvider = (props) => { - const [locale, setLocale] = useState(i18n.getLocale().substr(0, 2)); - const value = useMemo(() => [locale, setLocale], [locale]); + const value = useState(defaultLocale); return ; }; diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx index aab24c43..60b273f4 100644 --- a/imports/ui/state/MenuOpenState.jsx +++ b/imports/ui/state/MenuOpenState.jsx @@ -1,7 +1,6 @@ import React, { createContext, useContext, - useMemo, useState, } from 'react'; import PropTypes from 'prop-types'; @@ -22,8 +21,7 @@ const MenuOpenProvider = ({ menuOpen: initMenuOpen, ...props }) => { - const [menuOpen, setMenuOpen] = useState(initMenuOpen); - const value = useMemo(() => [menuOpen, setMenuOpen], [menuOpen]); + const value = useState(initMenuOpen); return ; }; From 1cff8024a0514eeb8793fe61048afba30fee5586 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Fri, 8 Nov 2019 19:36:55 +0800 Subject: [PATCH 35/43] Manage redirections using useHistory Update react-router-dom and a few other packages that had been left unupdated using npm-check-update Remove all Redirect components Transfer redirection from App component to AppContent component --- imports/ui/components/ListHeader.jsx | 88 +- imports/ui/components/ListList.jsx | 66 +- imports/ui/layouts/App.jsx | 57 +- imports/ui/layouts/AppContent.jsx | 42 +- imports/ui/pages/AuthPageJoin.jsx | 133 +- imports/ui/pages/AuthPageSignIn.jsx | 108 +- package-lock.json | 2702 ++++++++++++-------------- package.json | 33 +- 8 files changed, 1521 insertions(+), 1708 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index 3dd0d61d..7086e566 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -2,10 +2,10 @@ /* eslint-disable no-alert, no-restricted-globals */ import React, { useEffect, useState } from 'react'; -import { Redirect } from 'react-router-dom'; +import { useHistory } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; -import MobileMenu from './MobileMenu.jsx'; +// import MobileMenu from './MobileMenu.jsx'; import { displayError } from '../helpers/errors.js'; import { @@ -17,17 +17,17 @@ import { import { insert } from '../../api/todos/methods.js'; const ListHeader = ({ list }) => { + const history = useHistory(); const [editing, setEditing] = useState(false); - const [redirectTo, setRedirectTo] = useState(null); useEffect(() => { - setRedirectTo(null); - }, [redirectTo]); + if (editing) { + this.listNameInput.focus(); + } + }, [editing]); const editList = () => { - this.setState({ editing: true }, () => { - this.listNameInput.focus(); - }); + setEditing(true); }; const cancelEdit = () => { @@ -43,12 +43,11 @@ const ListHeader = ({ list }) => { }; const deleteList = () => { - const message = - `${i18n.__('components.listHeader.deleteConfirm')} ${list.name}?`; + const message = `${i18n.__('components.listHeader.deleteConfirm')} ${list.name}?`; if (confirm(message)) { remove.call({ listId: list._id }, displayError); - setRedirectTo('/'); + history.replace('/'); } }; @@ -103,7 +102,7 @@ const ListHeader = ({ list }) => { const renderDefaultHeader = () => (
- + {/* */}

{list.name} {list.incompleteCount} @@ -118,13 +117,16 @@ const ListHeader = ({ list }) => { - {list.userId ? - : - } + {list.userId + ? ( + + ) : ( + + )} @@ -134,14 +136,17 @@ const ListHeader = ({ list }) => {
{list.userId - ? - : } + ? ( + + ) : ( + + )} { ); - return redirectTo - ? - : ( - - ); + return ( + + ); }; ListHeader.propTypes = { diff --git a/imports/ui/components/ListList.jsx b/imports/ui/components/ListList.jsx index 0ce57abe..b2cb3f65 100644 --- a/imports/ui/components/ListList.jsx +++ b/imports/ui/components/ListList.jsx @@ -1,56 +1,50 @@ /* global alert */ -import React, { useEffect, useState } from 'react'; -import { NavLink, Redirect } from 'react-router-dom'; +import React from 'react'; +import { NavLink, useHistory } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; import { insert } from '../../api/lists/methods.js'; const ListList = ({ lists }) => { - const [redirectTo, setRedirectTo] = useState(null); - - useEffect(() => { - setRedirectTo(null); - }, [redirectTo]); + const history = useHistory(); const createNewList = () => { const listId = insert.call({ locale: i18n.getLocale() }, (err) => { if (err) { - setRedirectTo('/'); + history.replace('/'); /* eslint-disable no-alert */ alert(i18n.__('components.listList.newListError')); } }); - setRedirectTo(`/lists/${listId}`); + history.replace(`/lists/${listId}`); }; - return redirectTo - ? - : ( -
- - - {i18n.__('components.listList.newList')} - - {lists.map(list => ( - - {list.userId - ? - : null} - {list.incompleteCount - ? {list.incompleteCount} - : null} - {list.name} - - ))} -
- ); + return ( +
+ + + {i18n.__('components.listList.newList')} + + {lists.map((list) => ( + + {list.userId + ? + : null} + {list.incompleteCount + ? {list.incompleteCount} + : null} + {list.name} + + ))} +
+ ); }; ListList.propTypes = { diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index 08e01d30..b9e7087a 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -1,9 +1,7 @@ import React, { useEffect, useState } from 'react'; -import { BrowserRouter, Route, Redirect } from 'react-router-dom'; +import { BrowserRouter } from 'react-router-dom'; import PropTypes from 'prop-types'; -import { Meteor } from 'meteor/meteor'; -import { Lists } from '../../api/lists/lists.js'; import { GlobalStateProvider } from '../state/GlobalStateProvider.jsx'; import AppContent from './AppContent.jsx'; @@ -20,59 +18,24 @@ const App = ({ lists, }) => { const [showConnectionIssue, setShowConnectionIssue] = useState(false); - const [defaultList, setDefaultList] = useState(null); - const [redirectTo, setRedirectTo] = useState(null); useEffect(() => { - setTimeout(() => { + const timeout = setTimeout(() => { setShowConnectionIssue(true); }, CONNECTION_ISSUE_TIMEOUT); + return () => { + clearTimeout(timeout); + }; }, []); - useEffect(() => { - if (!loading) { - const list = Lists.findOne(); - setDefaultList(`/lists/${list._id}`); - } - }, [loading]); - - const logout = () => { - Meteor.logout(); - setRedirectTo(defaultList); - }; - - const renderRedirect = (location) => { - const { pathname } = location; - let redirect = null; - if (redirectTo && redirectTo !== pathname) { - redirect = ; - } else if (pathname === '/' && defaultList) { - redirect = ; - } - setRedirectTo(null); - return redirect; - }; - - renderRedirect.propTypes = { - pathname: PropTypes.string.isRequired, - }; - return ( - ( - renderRedirect(location) || ( - - ) - )} + diff --git a/imports/ui/layouts/AppContent.jsx b/imports/ui/layouts/AppContent.jsx index c0a21c85..c714e339 100644 --- a/imports/ui/layouts/AppContent.jsx +++ b/imports/ui/layouts/AppContent.jsx @@ -1,5 +1,11 @@ -import React, { useEffect } from 'react'; -import { Switch, Route } from 'react-router-dom'; +import { Meteor } from 'meteor/meteor'; +import React, { useEffect, useState } from 'react'; +import { + Switch, + Route, + useHistory, + useLocation, +} from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; @@ -14,22 +20,40 @@ import AuthPageJoin from '../pages/AuthPageJoin.jsx'; import NotFoundPage from '../pages/NotFoundPage.jsx'; import { useMenuOpen } from '../state/MenuOpenState.jsx'; import { useLocale } from '../state/LocaleState.jsx'; +import { Lists } from '../../api/lists/lists.js'; const AppContent = ({ connexionNotification, lists, loading, - location, - logout, user, }) => { + const history = useHistory(); + const location = useLocation(); const [menuOpen, setMenuOpen] = useMenuOpen(); const [, setLocale] = useLocale(); + const [defaultList, setDefaultList] = useState(null); + + if (defaultList && location.pathname === '/') { + history.replace(defaultList); + } + + useEffect(() => { + if (!loading) { + const list = Lists.findOne(); + setDefaultList(`/lists/${list._id}`); + } + }, [loading]); const handleLocaleChange = (newLocale) => { setLocale(newLocale); }; + const logout = () => { + Meteor.logout(); + history.replace(defaultList || '/'); + }; + useEffect(() => { i18n.onChangeLocale(handleLocaleChange); return () => { @@ -54,15 +78,14 @@ const AppContent = ({
{loading ? ( - + ) : ( - + { + const history = useHistory(); const [errors, setErrors] = useState({}); - const [redirectTo, setRedirectTo] = useState(null); - - useEffect(() => { - setRedirectTo(null); - }, [redirectTo]); const onSubmit = (event) => { event.preventDefault(); @@ -42,13 +38,14 @@ const JoinPage = () => { }, (err) => { if (err) { setErrors({ none: err.reason }); + } else { + history.replace('/'); } - setRedirectTo('/'); }); }; const errorMessages = Object.values(errors); - const errorClass = key => errors[key] && 'error'; + const errorClass = (key) => errors[key] && 'error'; const link = ( @@ -56,66 +53,64 @@ const JoinPage = () => { ); - return redirectTo - ? - : ( - -
-

- {i18n.__('pages.authPageJoin.join')} -

-

- {i18n.__('pages.authPageJoin.joinReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageJoin.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageJoin.password')} - /> - -
-
- { this.confirmPassword = c; }} - placeholder={i18n.__('pages.authPageJoin.confirmPassword')} - /> - -
- -
-
-
- ); + return ( + +
+

+ {i18n.__('pages.authPageJoin.join')} +

+

+ {i18n.__('pages.authPageJoin.joinReason')} +

+
+
+ {errorMessages.map((msg) => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageJoin.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageJoin.password')} + /> + +
+
+ { this.confirmPassword = c; }} + placeholder={i18n.__('pages.authPageJoin.confirmPassword')} + /> + +
+ +
+
+
+ ); }; export default JoinPage; diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index ab28c2c1..3fba6f66 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -1,17 +1,13 @@ -import React, { useEffect, useState } from 'react'; -import { Link, Redirect } from 'react-router-dom'; +import React, { useState } from 'react'; +import { Link, useHistory } from 'react-router-dom'; import { Meteor } from 'meteor/meteor'; import i18n from 'meteor/universe:i18n'; import AuthPage from './AuthPage.jsx'; const SignInPage = () => { + const history = useHistory(); const [errors, setErrors] = useState({}); - const [redirectTo, setRedirectTo] = useState(null); - - useEffect(() => { - setRedirectTo(null); - }, [redirectTo]); const onSubmit = (event) => { event.preventDefault(); @@ -38,13 +34,13 @@ const SignInPage = () => { setErrors({ none: err.reason }); } } else { - setRedirectTo('/'); + history.replace('/'); } }); }; const errorMessages = Object.values(errors); - const errorClass = key => errors[key] && 'error'; + const errorClass = (key) => errors[key] && 'error'; const link = ( @@ -52,54 +48,52 @@ const SignInPage = () => { ); - return redirectTo - ? - : ( - -
-

- {i18n.__('pages.authPageSignIn.signIn')} -

-

- {i18n.__('pages.authPageSignIn.signInReason')} -

-
-
- {errorMessages.map(msg => ( -
{msg}
- ))} -
-
- { this.email = c; }} - placeholder={i18n.__('pages.authPageSignIn.yourEmail')} - /> - -
-
- { this.password = c; }} - placeholder={i18n.__('pages.authPageSignIn.password')} - /> - -
- -
-
-
- ); + return ( + +
+

+ {i18n.__('pages.authPageSignIn.signIn')} +

+

+ {i18n.__('pages.authPageSignIn.signInReason')} +

+
+
+ {errorMessages.map((msg) => ( +
{msg}
+ ))} +
+
+ { this.email = c; }} + placeholder={i18n.__('pages.authPageSignIn.yourEmail')} + /> + +
+
+ { this.password = c; }} + placeholder={i18n.__('pages.authPageSignIn.password')} + /> + +
+ +
+
+
+ ); }; export default SignInPage; diff --git a/package-lock.json b/package-lock.json index 161a4c0b..9f5bb1b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3,25 +3,24 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.44" + "@babel/highlight": "^7.0.0" } }, "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", + "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44", + "@babel/types": "^7.7.2", "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "lodash": "^4.17.13", + "source-map": "^0.5.0" }, "dependencies": { "source-map": { @@ -33,43 +32,43 @@ } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", + "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" + "@babel/helper-get-function-arity": "^7.7.0", + "@babel/template": "^7.7.0", + "@babel/types": "^7.7.0" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", + "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44" + "@babel/types": "^7.7.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", + "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.44" + "@babel/types": "^7.7.0" } }, "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", - "js-tokens": "^3.0.0" + "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { @@ -91,55 +90,82 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true } } }, + "@babel/parser": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.2.tgz", + "integrity": "sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w==", + "dev": true + }, "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", + "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", + "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/types": "^7.7.0" } }, "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", + "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.2", + "@babel/helper-function-name": "^7.7.0", + "@babel/helper-split-export-declaration": "^7.7.0", + "@babel/parser": "^7.7.2", + "@babel/types": "^7.7.2", + "debug": "^4.1.0", "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", + "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.2.0", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -149,22 +175,22 @@ "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true }, "airbnb-prop-types": { "version": "2.15.0", @@ -184,6 +210,27 @@ "react-is": "^16.9.0" } }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -194,6 +241,20 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -229,21 +290,6 @@ "es-abstract": "^1.7.0" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array.prototype.find": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", @@ -265,12 +311,6 @@ "function-bind": "^1.1.1" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -282,17 +322,44 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "autoprefixer": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", - "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", + "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", "requires": { - "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000864", + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^6.0.23", - "postcss-value-parser": "^3.2.3" + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "axobject-query": { @@ -315,17 +382,34 @@ } }, "babel-eslint": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", - "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "babel-helpers": { @@ -402,477 +486,52 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - } - } - }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-2.0.1.tgz", - "integrity": "sha512-DwB7WgJPdskbR+9Y3OTJtwRq09Lmm7Na6b+4ewvXjkD0nfNRi1OozxljHm5ETlDCBq9DTy04lQz+rj+T2ztIJg==", - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.9.1" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.2", - "bundled": true - } - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.9.1", - "bundled": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "rc": { - "version": "1.2.6", - "bundled": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true - } - } - }, - "readable-stream": { - "version": "2.3.5", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "sax": { - "version": "1.2.4", - "bundled": true - }, - "semver": { - "version": "5.5.0", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - }, - "dependencies": { - "yallist": { - "version": "3.0.2", - "bundled": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "string-width": "^1.0.2" + "ms": "2.0.0" } }, - "wrappy": { - "version": "1.0.2", - "bundled": true + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz", + "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==", + "requires": { + "nan": "2.13.2", + "node-pre-gyp": "0.12.0" + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -883,40 +542,31 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", + "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", "requires": { - "callsites": "^0.2.0" + "caniuse-lite": "^1.0.30001004", + "electron-to-chromium": "^1.3.295", + "node-releases": "^1.1.38" } }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "caniuse-lite": { - "version": "1.0.30001005", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz", - "integrity": "sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg==" + "version": "1.0.30001008", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz", + "integrity": "sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw==" }, "chalk": { "version": "1.1.3", @@ -938,9 +588,9 @@ } }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "cheerio": { @@ -957,35 +607,42 @@ "parse5": "^3.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" }, "classnames": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -1002,19 +659,18 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "confusing-browser-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "contains-path": { "version": "0.1.0", @@ -1030,18 +686,27 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "css-select": { @@ -1062,6 +727,11 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, + "csstype": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", + "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==" + }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -1072,7 +742,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" }, @@ -1080,11 +749,15 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1100,20 +773,15 @@ "object-keys": "^1.0.12" } }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "discontinuous-range": { "version": "1.0.0", @@ -1131,11 +799,12 @@ } }, "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.3.tgz", + "integrity": "sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==", "requires": { - "@babel/runtime": "^7.1.2" + "@babel/runtime": "^7.6.3", + "csstype": "^2.6.7" } }, "dom-serializer": { @@ -1174,9 +843,9 @@ } }, "electron-to-chromium": { - "version": "1.3.296", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz", - "integrity": "sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==" + "version": "1.3.306", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz", + "integrity": "sha512-frDqXvrIROoYvikSKTIKbHbzO6M3/qC6kCIt/1FOa9kALe++c4VAJnwjSFvf1tYLEUsP2n9XZ4XSCyqc3l7A/A==" }, "emoji-regex": { "version": "7.0.3", @@ -1328,85 +997,54 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", + "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -1419,9 +1057,9 @@ } }, "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -1429,206 +1067,73 @@ "supports-color": "^5.3.0" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "ms": "^2.1.1" } }, - "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", - "dev": true - }, - "has-flag": { + "doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "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 - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "esutils": "^2.0.2" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^4.1.0" } }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true } } }, "eslint-config-airbnb": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz", - "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.0.1.tgz", + "integrity": "sha512-hLb/ccvW4grVhvd6CT83bECacc+s4Z3/AEyWQdIT2KeTsG9dR7nx1gs7Iw4tDmGKozCNHFn4yZmRm3Tgy+XxyQ==", "dev": true, "requires": { - "eslint-config-airbnb-base": "^12.1.0" - }, - "dependencies": { - "eslint-config-airbnb-base": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", - "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1" - } - } + "eslint-config-airbnb-base": "^14.0.0", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0" + } + }, + "eslint-config-airbnb-base": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz", + "integrity": "sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.7", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0" } }, "eslint-import-resolver-meteor": { @@ -1756,9 +1261,9 @@ } }, "eslint-plugin-meteor": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-4.2.2.tgz", - "integrity": "sha512-VLvsBdnwTlFjLmpKUCdoy4Sm1mlzeh8FcIXkyxJw2MaZMFHprIjbolZD0JguhP8yK3UwZelZaCIyvk2tidwIbA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-5.2.0.tgz", + "integrity": "sha512-bHzs/0BwHdKcBbX7tYrSnBaMG+1i2f1wy8k6H/sBBsERD/yifmBUrNLiPyZkIvyVUeI8OaZw8U9fsMvLP5GhIg==", "dev": true, "requires": { "invariant": "2.2.4" @@ -1798,28 +1303,48 @@ } } }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "eslint-plugin-react-hooks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.2.0.tgz", + "integrity": "sha512-jSlnBjV2cmyIeL555H/FbvuSbQ1AtpHjLMHuPrQnt1eVA6lX8yufdygh7AArI2m8ct7ChHGx2uOaCuxq2MUn6g==", "dev": true }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -1827,28 +1352,27 @@ "dev": true }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { "estraverse": "^4.0.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "^4.1.0", - "object-assign": "^4.0.1" + "estraverse": "^4.1.0" } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -1857,14 +1381,25 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "faker": { @@ -1873,9 +1408,9 @@ "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { @@ -1911,42 +1446,87 @@ } } }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { "version": "1.1.1", @@ -1978,11 +1558,25 @@ "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1992,32 +1586,32 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2046,6 +1640,11 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -2060,9 +1659,12 @@ } }, "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } }, "hosted-git-info": { "version": "2.8.5", @@ -2127,11 +1729,29 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2142,7 +1762,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2151,8 +1770,93 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", + "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "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 + }, + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" + } + }, + "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, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } }, "interpret": { "version": "1.2.0", @@ -2192,36 +1896,35 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-path-in-cwd": { + "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "is-path-inside": "^1.0.0" + "number-is-nan": "^1.0.0" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "is-extglob": "^2.1.1" } }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -2237,12 +1940,6 @@ "has": "^1.0.1" } }, - "is-resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", - "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2272,8 +1969,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -2312,9 +2008,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { @@ -2396,20 +2092,10 @@ "js-tokens": "^3.0.0" } }, - "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "meteor-node-stubs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.3.3.tgz", - "integrity": "sha512-TI1aQRK0vqs94OCkUMkmf5lXNWfIsjSaEDP1inUuwRGt9w8/S2V+HdRikz9r1k/gew+7NcJieaqHsHX7pSTEgA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", + "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", "dev": true, "requires": { "assert": "^1.4.1", @@ -2426,7 +2112,7 @@ "process": "^0.11.9", "punycode": "^1.4.1", "querystring-es3": "^0.2.1", - "readable-stream": "git+https://github.com/meteor/readable-stream.git", + "readable-stream": "^2.3.6", "stream-browserify": "^2.0.1", "stream-http": "^2.8.0", "string_decoder": "^1.1.0", @@ -2439,8 +2125,7 @@ "dependencies": { "asn1.js": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.0.0", @@ -2450,49 +2135,30 @@ }, "assert": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "bundled": true, "dev": true, "requires": { "util": "0.10.3" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "version": "1.3.0", + "bundled": true, "dev": true }, "bn.js": { "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "bundled": true, "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "bundled": true, "dev": true }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "bundled": true, "dev": true, "requires": { "buffer-xor": "^1.0.3", @@ -2504,9 +2170,8 @@ } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "bundled": true, "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -2515,9 +2180,8 @@ } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "bundled": true, "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -2527,8 +2191,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2537,8 +2200,7 @@ }, "browserify-sign": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.1.1", @@ -2552,8 +2214,7 @@ }, "browserify-zlib": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "bundled": true, "dev": true, "requires": { "pako": "~0.2.0" @@ -2561,8 +2222,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "bundled": true, "dev": true, "requires": { "base64-js": "^1.0.2", @@ -2572,35 +2232,26 @@ }, "buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "bundled": true, "dev": true }, "builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "bundled": true, "dev": true }, "cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "bundled": true, "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, "console-browserify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "bundled": true, "dev": true, "requires": { "date-now": "^0.1.4" @@ -2608,14 +2259,17 @@ }, "constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, "dev": true }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2623,21 +2277,20 @@ } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "bundled": true, "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", - "ripemd160": "^2.0.0", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "bundled": true, "dev": true, "requires": { "cipher-base": "^1.0.3", @@ -2650,8 +2303,7 @@ }, "crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "bundled": true, "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -2669,14 +2321,12 @@ }, "date-now": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "bundled": true, "dev": true }, "des.js": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "bundled": true, "dev": true, "requires": { "inherits": "^2.0.1", @@ -2684,9 +2334,8 @@ } }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2696,14 +2345,12 @@ }, "domain-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "bundled": true, "dev": true }, "elliptic": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.4.0", @@ -2717,51 +2364,30 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "bundled": true, "dev": true }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "bundled": true, "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "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" - } - }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "bundled": true, "dev": true, "requires": { - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "bundled": true, "dev": true, "requires": { "inherits": "^2.0.3", @@ -2770,16 +2396,14 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "bundled": true, "dev": true } } }, "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "bundled": true, "dev": true, "requires": { "hash.js": "^1.0.3", @@ -2789,68 +2413,41 @@ }, "https-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "bundled": true, "dev": true }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "bundled": true, "dev": true }, "indexof": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "bundled": true, "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "bundled": true, + "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "dev": true }, "md5.js": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "bundled": true, "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - } } }, "miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.0.0", @@ -2858,49 +2455,28 @@ } }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "bundled": true, "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "bundled": true, "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, "os-browserify": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "bundled": true, "dev": true }, "pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "bundled": true, "dev": true }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "bundled": true, "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -2912,19 +2488,12 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "bundled": true, "dev": true }, - "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=" - }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "bundled": true, "dev": true, "requires": { "create-hash": "^1.1.2", @@ -2936,20 +2505,17 @@ }, "process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "bundled": true, "dev": true }, "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "version": "2.0.0", + "bundled": true, "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "bundled": true, "dev": true, "requires": { "bn.js": "^4.1.0", @@ -2961,26 +2527,22 @@ }, "punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "bundled": true, "dev": true }, "querystring": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "bundled": true, "dev": true }, "querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "bundled": true, "dev": true }, "randombytes": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "bundled": true, "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -2988,8 +2550,7 @@ }, "randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "bundled": true, "dev": true, "requires": { "randombytes": "^2.0.5", @@ -2997,54 +2558,43 @@ } }, "readable-stream": { - "version": "git+https://github.com/meteor/readable-stream.git#c688cdd193549919b840e8d72a86682d91961e12", - "from": "git+https://github.com/meteor/readable-stream.git", + "version": "2.3.6", + "bundled": true, "dev": true, "requires": { + "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.0", + "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" }, "dependencies": { "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "version": "2.0.3", + "bundled": true, "dev": true } } }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "bundled": true, "dev": true, "requires": { - "hash-base": "^2.0.0", + "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "version": "5.1.2", + "bundled": true, "dev": true }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "bundled": true, "dev": true, "requires": { "inherits": "^2.0.1", @@ -3053,8 +2603,7 @@ }, "stream-browserify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "bundled": true, "dev": true, "requires": { "inherits": "~2.0.1", @@ -3062,9 +2611,8 @@ } }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.1", + "bundled": true, "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -3075,9 +2623,8 @@ } }, "string_decoder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.0.tgz", - "integrity": "sha512-8zQpRF6juocE69ae7CSPmYEGJe4VCXwP6S6dxUWI7i53Gwv54/ec41fiUA+X7BPGGv7fRSQJjBQVa0gomGaOgg==", + "version": "1.1.1", + "bundled": true, "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -3085,8 +2632,7 @@ }, "timers-browserify": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "bundled": true, "dev": true, "requires": { "process": "~0.11.0" @@ -3094,20 +2640,17 @@ }, "to-arraybuffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "bundled": true, "dev": true }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "bundled": true, "dev": true }, "url": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "bundled": true, "dev": true, "requires": { "punycode": "1.3.2", @@ -3116,16 +2659,14 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "bundled": true, "dev": true } } }, "util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "bundled": true, "dev": true, "requires": { "inherits": "2.0.1" @@ -3133,43 +2674,44 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "bundled": true, "dev": true }, "vm-browserify": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "bundled": true, "dev": true, "requires": { "indexof": "0.0.1" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "xtend": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "bundled": true, "dev": true } } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mini-create-react-context": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz", + "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==", + "requires": { + "@babel/runtime": "^7.4.0", + "gud": "^1.0.0", + "tiny-warning": "^1.0.2" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3177,14 +2719,41 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -3200,6 +2769,17 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3219,6 +2799,22 @@ "semver": "^5.4.1" } }, + "needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -3228,6 +2824,47 @@ "is-stream": "^1.0.1" } }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "node-releases": { + "version": "1.1.39", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.39.tgz", + "integrity": "sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -3262,6 +2899,31 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" + }, + "npm-packlist": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz", + "integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -3276,6 +2938,11 @@ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3351,30 +3018,51 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } }, "p-limit": { "version": "1.3.0", @@ -3400,6 +3088,15 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -3427,13 +3124,12 @@ "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { @@ -3478,21 +3174,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -3503,13 +3184,13 @@ } }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" }, "dependencies": { "ansi-styles": { @@ -3528,14 +3209,32 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" } } } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" }, "prelude-ls": { "version": "1.1.2", @@ -3546,7 +3245,12 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise": { @@ -3588,10 +3292,10 @@ "reflect.ownkeys": "^0.2.0" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "raf": { @@ -3619,6 +3323,24 @@ "ret": "~0.1.10" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "react": { "version": "16.11.0", "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", @@ -3660,36 +3382,35 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==" }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", + "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.3.0", "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" } }, "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", + "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" + "prop-types": "^15.6.2", + "react-router": "5.1.2", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" } }, "react-test-renderer": { @@ -3705,14 +3426,14 @@ } }, "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", + "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", "requires": { - "dom-helpers": "^3.4.0", + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" + "prop-types": "^15.6.2" }, "dependencies": { "loose-envify": { @@ -3750,7 +3471,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3782,21 +3502,11 @@ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, "resolve": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", @@ -3807,9 +3517,9 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-pathname": { @@ -3817,6 +3527,16 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -3827,7 +3547,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, "requires": { "glob": "^7.0.5" } @@ -3842,27 +3561,40 @@ "nearley": "^2.7.10" } }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { - "rx-lite": "*" + "tslib": "^1.9.0" } }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "scheduler": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", @@ -3875,8 +3607,12 @@ "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "setimmediate": { "version": "1.0.5", @@ -3912,8 +3648,35 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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 + } + } }, "source-map": { "version": "0.6.1", @@ -3958,6 +3721,16 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "string.prototype.trim": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", @@ -3993,7 +3766,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -4015,8 +3787,7 @@ "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 + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { "version": "5.5.0", @@ -4026,6 +3797,78 @@ "has-flag": "^3.0.0" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "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 + }, + "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 + }, + "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, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "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, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4063,10 +3906,10 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "type-check": { @@ -4078,10 +3921,10 @@ "prelude-ls": "~1.1.2" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", "dev": true }, "ua-parser-js": { @@ -4089,10 +3932,24 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, "validate-npm-package-license": { @@ -4110,54 +3967,47 @@ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, "whatwg-fetch": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } } diff --git a/package.json b/package.json index 77dfb94c..df57078d 100644 --- a/package.json +++ b/package.json @@ -9,31 +9,32 @@ "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests" }, "dependencies": { - "@babel/runtime": "^7.6.3", - "autoprefixer": "^8.6.5", + "@babel/runtime": "^7.7.2", + "autoprefixer": "^9.7.1", "babel-helpers": "^6.24.1", - "bcrypt": "^2.0.1", + "bcrypt": "^3.0.6", "classnames": "^2.2.6", "faker": "^4.1.0", "prop-types": "^15.7.2", "react": "^16.11.0", "react-addons-pure-render-mixin": "^15.6.2", "react-dom": "^16.11.0", - "react-router-dom": "^4.3.1", - "react-transition-group": "^2.9.0" + "react-router-dom": "^5.1.2", + "react-transition-group": "^4.3.0" }, "devDependencies": { - "babel-eslint": "^8.2.6", + "babel-eslint": "^10.0.3", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.1", - "eslint": "^4.19.1", - "eslint-config-airbnb": "^16.1.0", + "eslint": "^6.6.0", + "eslint-config-airbnb": "^18.0.1", "eslint-import-resolver-meteor": "^0.4.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-meteor": "^4.2.2", + "eslint-plugin-meteor": "^5.2.0", "eslint-plugin-react": "^7.16.0", - "meteor-node-stubs": "^0.3.3", + "eslint-plugin-react-hooks": "^2.2.0", + "meteor-node-stubs": "^0.4.1", "react-addons-test-utils": "^15.6.2", "shelljs": "^0.8.3" }, @@ -96,13 +97,7 @@ "import/resolver": "meteor" } }, - "postcss": { - "plugins": { - "autoprefixer": { - "browsers": [ - "last 2 versions" - ] - } - } - } + "browserlist": [ + "defaults" + ] } From 9e60a75ff98020c335a5f17e361e9edde2479e12 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Sat, 9 Nov 2019 09:06:24 +0800 Subject: [PATCH 36/43] Fix some linting complaints --- imports/api/lists/lists.js | 2 ++ imports/api/lists/lists.tests.js | 8 +++++++- imports/api/todos/incompleteCountDenormalizer.js | 3 ++- imports/api/todos/todos.js | 3 +++ imports/ui/components/LanguageToggle.jsx | 2 +- imports/ui/components/UserMenu.jsx | 11 ++++++----- imports/ui/pages/ListPage.jsx | 4 ++-- imports/ui/state/GlobalStateProvider.jsx | 7 ++----- imports/ui/state/LocaleState.jsx | 4 ++-- imports/ui/state/MenuOpenState.jsx | 7 ++----- 10 files changed, 29 insertions(+), 22 deletions(-) diff --git a/imports/api/lists/lists.js b/imports/api/lists/lists.js index 74a59e39..1b70d973 100644 --- a/imports/api/lists/lists.js +++ b/imports/api/lists/lists.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-cycle */ import { Mongo } from 'meteor/mongo'; import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { Factory } from 'meteor/factory'; @@ -25,6 +26,7 @@ class ListsCollection extends Mongo.Collection { return super.insert(ourList, callback); } + remove(selector, callback) { Todos.remove({ listId: selector }); return super.remove(selector, callback); diff --git a/imports/api/lists/lists.tests.js b/imports/api/lists/lists.tests.js index 9515540c..e49ba708 100644 --- a/imports/api/lists/lists.tests.js +++ b/imports/api/lists/lists.tests.js @@ -9,7 +9,13 @@ import { _ } from 'meteor/underscore'; import { DDP } from 'meteor/ddp-client'; import { Lists } from './lists.js'; -import { insert, makePublic, makePrivate, updateName, remove } from './methods.js'; +import { + insert, + makePublic, + makePrivate, + updateName, + remove, +} from './methods.js'; import { Todos } from '../todos/todos.js'; import '../../../i18n/en.i18n.json'; diff --git a/imports/api/todos/incompleteCountDenormalizer.js b/imports/api/todos/incompleteCountDenormalizer.js index 553f00bd..a396c19c 100644 --- a/imports/api/todos/incompleteCountDenormalizer.js +++ b/imports/api/todos/incompleteCountDenormalizer.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-cycle */ import { _ } from 'meteor/underscore'; import { check } from 'meteor/check'; @@ -31,7 +32,7 @@ const incompleteCountDenormalizer = { // Here we need to take the list of todos being removed, selected *before* the update // because otherwise we can't figure out the relevant list id(s) (if the todo has been deleted) afterRemoveTodos(todos) { - todos.forEach(todo => this._updateList(todo.listId)); + todos.forEach((todo) => this._updateList(todo.listId)); }, }; diff --git a/imports/api/todos/todos.js b/imports/api/todos/todos.js index 13fb78b8..48bd178c 100644 --- a/imports/api/todos/todos.js +++ b/imports/api/todos/todos.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-cycle */ import { Mongo } from 'meteor/mongo'; import { Factory } from 'meteor/factory'; import faker from 'faker'; @@ -14,11 +15,13 @@ class TodosCollection extends Mongo.Collection { incompleteCountDenormalizer.afterInsertTodo(ourDoc); return result; } + update(selector, modifier) { const result = super.update(selector, modifier); incompleteCountDenormalizer.afterUpdateTodo(selector, modifier); return result; } + remove(selector) { const todos = this.find(selector).fetch(); const result = super.remove(selector); diff --git a/imports/ui/components/LanguageToggle.jsx b/imports/ui/components/LanguageToggle.jsx index c290598f..ec1f30e0 100644 --- a/imports/ui/components/LanguageToggle.jsx +++ b/imports/ui/components/LanguageToggle.jsx @@ -36,7 +36,7 @@ const LanguageToggle = () => { key={language} href="#toggle-language" className="language" - onClick={event => setI18nLocale(event, language)} + onClick={(event) => setI18nLocale(event, language)} > {language} diff --git a/imports/ui/components/UserMenu.jsx b/imports/ui/components/UserMenu.jsx index 9c1c7614..ac9649ff 100644 --- a/imports/ui/components/UserMenu.jsx +++ b/imports/ui/components/UserMenu.jsx @@ -26,11 +26,12 @@ const UserMenu = ({ : } {emailLocalPart} - {open ? - - {i18n.__('components.userMenu.logout')} - : - null} + {open + ? ( + + {i18n.__('components.userMenu.logout')} + + ) : null}
); }; diff --git a/imports/ui/pages/ListPage.jsx b/imports/ui/pages/ListPage.jsx index b4f80a69..2ee72d17 100644 --- a/imports/ui/pages/ListPage.jsx +++ b/imports/ui/pages/ListPage.jsx @@ -4,7 +4,7 @@ import i18n from 'meteor/universe:i18n'; import ListHeader from '../components/ListHeader.jsx'; import TodoItem from '../components/TodoItem.jsx'; -import NotFoundPage from '../pages/NotFoundPage.jsx'; +import NotFoundPage from './NotFoundPage.jsx'; import Message from '../components/Message.jsx'; import Loading from '../components/Loading.jsx'; @@ -36,7 +36,7 @@ const ListPage = ({ /> ); } else { - Todos = todos.map(todo => ( + Todos = todos.map((todo) => ( ( +export const GlobalStateProvider = ({ menuOpen }) => ( - + ); diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx index a4194142..d908c942 100644 --- a/imports/ui/state/LocaleState.jsx +++ b/imports/ui/state/LocaleState.jsx @@ -19,10 +19,10 @@ const useLocale = () => { return context; }; -const LocaleProvider = (props) => { +const LocaleProvider = () => { const value = useState(defaultLocale); - return ; + return ; }; export { LocaleProvider, useLocale }; diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx index 60b273f4..d27befc5 100644 --- a/imports/ui/state/MenuOpenState.jsx +++ b/imports/ui/state/MenuOpenState.jsx @@ -17,13 +17,10 @@ const useMenuOpen = () => { return context; }; -const MenuOpenProvider = ({ - menuOpen: initMenuOpen, - ...props -}) => { +const MenuOpenProvider = ({ menuOpen: initMenuOpen }) => { const value = useState(initMenuOpen); - return ; + return ; }; MenuOpenProvider.propTypes = { From 490362fac3d70153cc119add6c4de6f76065d6b1 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Sat, 9 Nov 2019 09:59:23 +0800 Subject: [PATCH 37/43] Fix broken state providers and use useRef instead of this to manage input values --- imports/ui/components/ListHeader.jsx | 32 ++++++++++++++---------- imports/ui/pages/AuthPageJoin.jsx | 17 +++++++------ imports/ui/pages/AuthPageSignIn.jsx | 12 +++++---- imports/ui/state/GlobalStateProvider.jsx | 13 ++++++++-- imports/ui/state/LocaleState.jsx | 16 ++++++++++-- imports/ui/state/MenuOpenState.jsx | 15 +++++++++-- 6 files changed, 74 insertions(+), 31 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index 7086e566..7978ffea 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -1,7 +1,7 @@ /* global confirm */ /* eslint-disable no-alert, no-restricted-globals */ -import React, { useEffect, useState } from 'react'; +import React, { useRef, useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; @@ -19,10 +19,12 @@ import { insert } from '../../api/todos/methods.js'; const ListHeader = ({ list }) => { const history = useHistory(); const [editing, setEditing] = useState(false); + const listNameRef = useRef(); + const newTodoRef = useRef(); useEffect(() => { - if (editing) { - this.listNameInput.focus(); + if (editing && listNameRef.current) { + listNameRef.current.focus(); } }, [editing]); @@ -35,11 +37,13 @@ const ListHeader = ({ list }) => { }; const saveList = () => { - setEditing(false); - updateName.call({ - listId: list._id, - newName: this.listNameInput.value, - }, displayError); + if (listNameRef.current && listNameRef.current.value) { + setEditing(false); + updateName.call({ + listId: list._id, + newName: listNameRef.current.value, + }, displayError); + } }; const deleteList = () => { @@ -86,8 +90,8 @@ const ListHeader = ({ list }) => { const createTodo = (event) => { event.preventDefault(); - const input = this.newTodoInput; - if (input.value.trim()) { + const input = newTodoRef.current; + if (input && input.value.trim()) { insert.call({ listId: list._id, text: input.value, @@ -97,7 +101,9 @@ const ListHeader = ({ list }) => { }; const focusTodoInput = () => { - this.newTodoInput.focus(); + if (newTodoRef.current) { + newTodoRef.current.focus(); + } }; const renderDefaultHeader = () => ( @@ -165,7 +171,7 @@ const ListHeader = ({ list }) => { type="text" name="name" autoComplete="off" - ref={(c) => { this.listNameInput = c; }} + ref={listNameRef} defaultValue={list.name} onKeyUp={onListInputKeyUp} onBlur={onListInputBlur} @@ -192,7 +198,7 @@ const ListHeader = ({ list }) => { { this.newTodoInput = c; }} + ref={newTodoRef} placeholder={i18n.__('components.listHeader.typeToAdd')} /> diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 6df37a11..016ca021 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useRef, useState } from 'react'; import { Link, useHistory } from 'react-router-dom'; import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; @@ -8,13 +8,16 @@ import AuthPage from './AuthPage.jsx'; const JoinPage = () => { const history = useHistory(); const [errors, setErrors] = useState({}); + const emailRef = useRef(); + const passwordRef = useRef(); + const confirmRef = useRef(); const onSubmit = (event) => { event.preventDefault(); - const email = this.email.value; - const password = this.password.value; - const confirmPassword = this.confirmPassword.value; + const email = emailRef.current ? emailRef.current.value : ''; + const password = passwordRef.current ? passwordRef.current.value : ''; + const confirmPassword = confirmRef.current ? confirmRef.current.value : ''; const newErrors = {}; if (!email) { @@ -72,7 +75,7 @@ const JoinPage = () => { { this.email = c; }} + ref={emailRef} placeholder={i18n.__('pages.authPageJoin.yourEmail')} /> { { this.password = c; }} + ref={passwordRef} placeholder={i18n.__('pages.authPageJoin.password')} /> { { this.confirmPassword = c; }} + ref={confirmRef} placeholder={i18n.__('pages.authPageJoin.confirmPassword')} /> { const history = useHistory(); const [errors, setErrors] = useState({}); + const emailRef = useRef(); + const passwordRef = useRef(); const onSubmit = (event) => { event.preventDefault(); - const email = this.email.value; - const password = this.password.value; + const email = emailRef.current ? emailRef.current.value : ''; + const password = passwordRef.current ? passwordRef.current.value : ''; const newErrors = {}; if (!email) { @@ -67,7 +69,7 @@ const SignInPage = () => { { this.email = c; }} + ref={emailRef} placeholder={i18n.__('pages.authPageSignIn.yourEmail')} /> { { this.password = c; }} + ref={passwordRef} placeholder={i18n.__('pages.authPageSignIn.password')} /> ( +export const GlobalStateProvider = ({ + menuOpen, + children, +}) => ( - + + {children} + ); GlobalStateProvider.propTypes = { menuOpen: PropTypes.bool, + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]).isRequired, }; GlobalStateProvider.defaultProps = { diff --git a/imports/ui/state/LocaleState.jsx b/imports/ui/state/LocaleState.jsx index d908c942..89790e40 100644 --- a/imports/ui/state/LocaleState.jsx +++ b/imports/ui/state/LocaleState.jsx @@ -3,6 +3,7 @@ import React, { useContext, useState, } from 'react'; +import PropTypes from 'prop-types'; import i18n from 'meteor/universe:i18n'; const defaultLocale = i18n.getLocale().substr(0, 2); @@ -19,10 +20,21 @@ const useLocale = () => { return context; }; -const LocaleProvider = () => { +const LocaleProvider = ({ children }) => { const value = useState(defaultLocale); - return ; + return ( + + {children} + + ); +}; + +LocaleProvider.propTypes = { + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]).isRequired, }; export { LocaleProvider, useLocale }; diff --git a/imports/ui/state/MenuOpenState.jsx b/imports/ui/state/MenuOpenState.jsx index d27befc5..445dd210 100644 --- a/imports/ui/state/MenuOpenState.jsx +++ b/imports/ui/state/MenuOpenState.jsx @@ -17,14 +17,25 @@ const useMenuOpen = () => { return context; }; -const MenuOpenProvider = ({ menuOpen: initMenuOpen }) => { +const MenuOpenProvider = ({ + menuOpen: initMenuOpen, + children, +}) => { const value = useState(initMenuOpen); - return ; + return ( + + {children} + + ); }; MenuOpenProvider.propTypes = { menuOpen: PropTypes.bool.isRequired, + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]).isRequired, }; export { MenuOpenProvider, useMenuOpen }; From be9e50a28ac47e88c4fb7f6c7915febc570361da Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Sat, 9 Nov 2019 10:36:53 +0800 Subject: [PATCH 38/43] Prevent asynchronous setState calls while component in unmounted Implement @HorusGoul solution using custom useUnmountedRef hook --- imports/ui/hooks/useUnmountedRef.jsx | 11 +++++++++++ imports/ui/pages/AuthPageJoin.jsx | 7 +++++++ imports/ui/pages/AuthPageSignIn.jsx | 7 +++++++ 3 files changed, 25 insertions(+) create mode 100644 imports/ui/hooks/useUnmountedRef.jsx diff --git a/imports/ui/hooks/useUnmountedRef.jsx b/imports/ui/hooks/useUnmountedRef.jsx new file mode 100644 index 00000000..37d56df1 --- /dev/null +++ b/imports/ui/hooks/useUnmountedRef.jsx @@ -0,0 +1,11 @@ +import { useRef, useEffect } from 'react'; + +export const useUnmountedRef = () => { + const unmountedRef = useRef(false); + + useEffect(() => () => { + unmountedRef.current = true; + }, []); + + return unmountedRef; +}; diff --git a/imports/ui/pages/AuthPageJoin.jsx b/imports/ui/pages/AuthPageJoin.jsx index 016ca021..7c375a70 100644 --- a/imports/ui/pages/AuthPageJoin.jsx +++ b/imports/ui/pages/AuthPageJoin.jsx @@ -3,6 +3,7 @@ import { Link, useHistory } from 'react-router-dom'; import { Accounts } from 'meteor/accounts-base'; import i18n from 'meteor/universe:i18n'; +import { useUnmountedRef } from '../hooks/useUnmountedRef.jsx'; import AuthPage from './AuthPage.jsx'; const JoinPage = () => { @@ -11,6 +12,7 @@ const JoinPage = () => { const emailRef = useRef(); const passwordRef = useRef(); const confirmRef = useRef(); + const unmountedRef = useUnmountedRef(); const onSubmit = (event) => { event.preventDefault(); @@ -39,6 +41,11 @@ const JoinPage = () => { email, password, }, (err) => { + if (unmountedRef.current) { + // Return to avoid the setState calls + return; + } + if (err) { setErrors({ none: err.reason }); } else { diff --git a/imports/ui/pages/AuthPageSignIn.jsx b/imports/ui/pages/AuthPageSignIn.jsx index ef028e52..ca7911bd 100644 --- a/imports/ui/pages/AuthPageSignIn.jsx +++ b/imports/ui/pages/AuthPageSignIn.jsx @@ -3,6 +3,7 @@ import { Link, useHistory } from 'react-router-dom'; import { Meteor } from 'meteor/meteor'; import i18n from 'meteor/universe:i18n'; +import { useUnmountedRef } from '../hooks/useUnmountedRef.jsx'; import AuthPage from './AuthPage.jsx'; const SignInPage = () => { @@ -10,6 +11,7 @@ const SignInPage = () => { const [errors, setErrors] = useState({}); const emailRef = useRef(); const passwordRef = useRef(); + const unmountedRef = useUnmountedRef(); const onSubmit = (event) => { event.preventDefault(); @@ -32,6 +34,11 @@ const SignInPage = () => { Meteor.loginWithPassword(email, password, (err) => { if (err) { + if (unmountedRef.current) { + // Return to avoid the setState calls + return; + } + if (err) { setErrors({ none: err.reason }); } From e57ff587b46575a1e14e73d7510157fd768ba697 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Sat, 9 Nov 2019 10:38:12 +0800 Subject: [PATCH 39/43] Fix typo --- imports/ui/layouts/App.jsx | 2 +- imports/ui/layouts/AppContent.jsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/imports/ui/layouts/App.jsx b/imports/ui/layouts/App.jsx index b9e7087a..f4a9ace7 100644 --- a/imports/ui/layouts/App.jsx +++ b/imports/ui/layouts/App.jsx @@ -32,7 +32,7 @@ const App = ({ - {connexionNotification + {connectionNotification ? : null}
@@ -112,14 +112,14 @@ const AppContent = ({ }; AppContent.propTypes = { - connexionNotification: PropTypes.bool, + connectionNotification: PropTypes.bool, lists: PropTypes.array.isRequired, loading: PropTypes.bool.isRequired, user: PropTypes.object, }; AppContent.defaultProps = { - connexionNotification: false, + connectionNotification: false, user: null, }; From d1178954539c13e7eab1a7670d6a8e544acf6267 Mon Sep 17 00:00:00 2001 From: Corentin Volant Date: Sat, 9 Nov 2019 11:43:49 +0800 Subject: [PATCH 40/43] Adapt ListHeader.tests --- imports/ui/components/ListHeader.jsx | 1 + imports/ui/components/ListHeader.tests.js | 25 ++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/imports/ui/components/ListHeader.jsx b/imports/ui/components/ListHeader.jsx index 7978ffea..c5984bb3 100644 --- a/imports/ui/components/ListHeader.jsx +++ b/imports/ui/components/ListHeader.jsx @@ -168,6 +168,7 @@ const ListHeader = ({ list }) => { const renderEditingHeader = () => (
{ let list = null; let header = null; - let redirectToStub = null; + // let redirectToStub = null; beforeEach(() => { list = Factory.create('list', { userId: Random.id(), name: 'testing' }); - header = mount(); - const headerWrapper = header.instance(); + header = mount( + + + + + , + ); + /* const headerWrapper = header.instance(); redirectToStub = sinon.stub(headerWrapper, 'redirectTo', () => {}); - headerWrapper.componentDidMount(); + headerWrapper.componentDidMount(); */ }); describe('any state', () => { it('should create a new todo when user submits', () => { sinon.stub(insert, 'call'); - header.instance().newTodoInput.value = 'new todo'; + header.find('.new-todo-input').simulate('change', { + target: { value: 'new todo' }, + }); header.find('.todo-new').simulate('submit'); sinon.assert.calledWith(insert.call, { listId: list._id, text: 'new todo' }); @@ -52,7 +61,7 @@ if (Meteor.isClient) { header.find('.trash').simulate('click'); sinon.assert.calledWith(remove.call, { listId: list._id }); - sinon.assert.calledWith(redirectToStub, '/'); + // sinon.assert.calledWith(redirectToStub, '/'); remove.call.restore(); window.confirm.restore(); @@ -81,7 +90,9 @@ if (Meteor.isClient) { it('should rename the list when user edits', () => { sinon.stub(updateName, 'call'); - header.instance().listNameInput.value = 'renamed'; + header.find('.list-name-input').simulate('change', { + target: { value: 'renamed' }, + }); header.find('.list-edit-form').simulate('submit'); sinon.assert.calledWith(updateName.call, { listId: list._id, From 3d4e5242260cecb57074c65625ec94e80f69feac Mon Sep 17 00:00:00 2001 From: Horus Lugo Date: Thu, 14 Nov 2019 10:37:14 +0100 Subject: [PATCH 41/43] Adds import/no-cycle rule to eslintConfig --- imports/api/lists/lists.js | 1 - imports/api/todos/incompleteCountDenormalizer.js | 1 - imports/api/todos/todos.js | 1 - package.json | 3 ++- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/imports/api/lists/lists.js b/imports/api/lists/lists.js index 1b70d973..fc60140d 100644 --- a/imports/api/lists/lists.js +++ b/imports/api/lists/lists.js @@ -1,4 +1,3 @@ -/* eslint-disable import/no-cycle */ import { Mongo } from 'meteor/mongo'; import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { Factory } from 'meteor/factory'; diff --git a/imports/api/todos/incompleteCountDenormalizer.js b/imports/api/todos/incompleteCountDenormalizer.js index a396c19c..f3189910 100644 --- a/imports/api/todos/incompleteCountDenormalizer.js +++ b/imports/api/todos/incompleteCountDenormalizer.js @@ -1,4 +1,3 @@ -/* eslint-disable import/no-cycle */ import { _ } from 'meteor/underscore'; import { check } from 'meteor/check'; diff --git a/imports/api/todos/todos.js b/imports/api/todos/todos.js index 48bd178c..0137eeae 100644 --- a/imports/api/todos/todos.js +++ b/imports/api/todos/todos.js @@ -1,4 +1,3 @@ -/* eslint-disable import/no-cycle */ import { Mongo } from 'meteor/mongo'; import { Factory } from 'meteor/factory'; import faker from 'faker'; diff --git a/package.json b/package.json index df57078d..8c283866 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,8 @@ "jsx-a11y/no-static-element-interactions": "off", "jsx-a11y/click-events-have-key-events": "off", "jsx-a11y/no-noninteractive-element-interactions": "off", - "jsx-a11y/anchor-is-valid": "off" + "jsx-a11y/anchor-is-valid": "off", + "import/no-cycle": "off" }, "settings": { "import/resolver": "meteor" From e66624b6cae946019c9129a7a8167b6ac2eb2cb6 Mon Sep 17 00:00:00 2001 From: Horus Lugo Date: Thu, 14 Nov 2019 10:46:50 +0100 Subject: [PATCH 42/43] Removes enzyme tests --- imports/ui/components/ListHeader.tests.js | 105 ----- imports/ui/components/TodoItem.tests.js | 79 ---- package-lock.json | 463 ---------------------- package.json | 2 - 4 files changed, 649 deletions(-) delete mode 100644 imports/ui/components/ListHeader.tests.js delete mode 100644 imports/ui/components/TodoItem.tests.js diff --git a/imports/ui/components/ListHeader.tests.js b/imports/ui/components/ListHeader.tests.js deleted file mode 100644 index 4eff0c6c..00000000 --- a/imports/ui/components/ListHeader.tests.js +++ /dev/null @@ -1,105 +0,0 @@ -/* global window */ -/* eslint-env mocha */ - -import { Meteor } from 'meteor/meteor'; -import { Factory } from 'meteor/factory'; -import React from 'react'; -import { BrowserRouter, Route } from 'react-router-dom'; -import { configure, mount } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; -import { chai } from 'meteor/practicalmeteor:chai'; -import { sinon } from 'meteor/practicalmeteor:sinon'; -import { Random } from 'meteor/random'; - -import ListHeader from './ListHeader.jsx'; -import { - updateName, - remove, -} from '../../api/lists/methods.js'; -import { insert } from '../../api/todos/methods.js'; - -configure({ adapter: new Adapter() }); - -if (Meteor.isClient) { - describe('ListHeader', () => { - let list = null; - let header = null; - // let redirectToStub = null; - - beforeEach(() => { - list = Factory.create('list', { userId: Random.id(), name: 'testing' }); - header = mount( - - - - - , - ); - /* const headerWrapper = header.instance(); - redirectToStub = sinon.stub(headerWrapper, 'redirectTo', () => {}); - headerWrapper.componentDidMount(); */ - }); - - describe('any state', () => { - it('should create a new todo when user submits', () => { - sinon.stub(insert, 'call'); - - header.find('.new-todo-input').simulate('change', { - target: { value: 'new todo' }, - }); - header.find('.todo-new').simulate('submit'); - - sinon.assert.calledWith(insert.call, { listId: list._id, text: 'new todo' }); - - insert.call.restore(); - }); - - it('should delete list and navigate home when user clicks trash', () => { - sinon.stub(remove, 'call'); - sinon.stub(window, 'confirm').returns(true); - - header.find('.trash').simulate('click'); - - sinon.assert.calledWith(remove.call, { listId: list._id }); - // sinon.assert.calledWith(redirectToStub, '/'); - - remove.call.restore(); - window.confirm.restore(); - }); - }); - - describe('non-editing state', () => { - it('should render title and todo creation form', () => { - chai.assert.equal(header.find('.title-wrapper').text(), 'testing'); - chai.assert(header.find('.todo-new').length); - chai.assert(!header.find('.list-edit-form').length); - }); - }); - - describe('editing state', () => { - beforeEach(() => { - header.setState({ editing: true }); - }); - - it('should render edit and todo creation forms', () => { - chai.assert(header.find('.list-edit-form').length); - chai.assert(header.find('.todo-new').length); - chai.assert(!header.find('.title-page').length); - }); - - it('should rename the list when user edits', () => { - sinon.stub(updateName, 'call'); - - header.find('.list-name-input').simulate('change', { - target: { value: 'renamed' }, - }); - header.find('.list-edit-form').simulate('submit'); - sinon.assert.calledWith(updateName.call, { - listId: list._id, - newName: 'renamed', - }); - updateName.call.restore(); - }); - }); - }); -} diff --git a/imports/ui/components/TodoItem.tests.js b/imports/ui/components/TodoItem.tests.js deleted file mode 100644 index 7c77218a..00000000 --- a/imports/ui/components/TodoItem.tests.js +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-env mocha */ - -import { Meteor } from 'meteor/meteor'; -import { Factory } from 'meteor/factory'; -import React from 'react'; -import { configure, shallow } from 'enzyme'; -import { chai } from 'meteor/practicalmeteor:chai'; -import { sinon } from 'meteor/practicalmeteor:sinon'; -import Adapter from 'enzyme-adapter-react-16'; - -import TodoItem from './TodoItem.jsx'; -import { - setCheckedStatus, - updateText, - remove, -} from '../../api/todos/methods.js'; - -configure({ adapter: new Adapter() }); - -if (Meteor.isClient) { - describe('TodoItem', () => { - it('should render', () => { - const todo = Factory.create('todo', { text: 'testing', checked: true }); - const item = shallow(); - chai.assert(item.hasClass('list-item')); - chai.assert(item.hasClass('checked')); - chai.assert.equal(item.find('input[type="text"]').prop('defaultValue'), 'testing'); - }); - - describe('interaction', () => { - let item = null; - let todo = null; - beforeEach(() => { - todo = Factory.create('todo', { text: 'testing' }); - item = shallow(); - }); - - it('should update text when edited', () => { - sinon.stub(updateText, 'call'); - - item.find('input[type="text"]').simulate('change', { - target: { value: 'tested' }, - }); - - sinon.assert.calledWith(updateText.call, { - todoId: todo._id, - newText: 'tested', - }); - - updateText.call.restore(); - }); - - it('should update status when checked', () => { - sinon.stub(setCheckedStatus, 'call'); - - item.find('input[type="checkbox"]').simulate('change', { - target: { checked: true }, - }); - - sinon.assert.calledWith(setCheckedStatus.call, { - todoId: todo._id, - newCheckedStatus: true, - }); - - setCheckedStatus.call.restore(); - }); - - it('should delete when trash is clicked', () => { - sinon.stub(remove, 'call'); - - item.find('.delete-item').simulate('click'); - - sinon.assert.calledOnce(remove.call); - - remove.call.restore(); - }); - }); - }); -} diff --git a/package-lock.json b/package-lock.json index 9f5bb1b9..cf441939 100644 --- a/package-lock.json +++ b/package-lock.json @@ -169,12 +169,6 @@ "to-fast-properties": "^2.0.0" } }, - "@types/node": { - "version": "12.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", - "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -192,24 +186,6 @@ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, - "airbnb-prop-types": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", - "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", - "dev": true, - "requires": { - "array.prototype.find": "^2.1.0", - "function.prototype.name": "^1.1.1", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.9.0" - } - }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -274,12 +250,6 @@ "commander": "^2.11.0" } }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -290,27 +260,6 @@ "es-abstract": "^1.7.0" } }, - "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" - } - }, - "array.prototype.flat": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", - "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", - "function-bind": "^1.1.1" - } - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -532,12 +481,6 @@ "node-pre-gyp": "0.12.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -593,20 +536,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, "chownr": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", @@ -709,24 +638,6 @@ } } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, "csstype": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", @@ -783,12 +694,6 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -807,41 +712,6 @@ "csstype": "^2.6.7" } }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "electron-to-chromium": { "version": "1.3.306", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz", @@ -861,98 +731,6 @@ "iconv-lite": "~0.4.13" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "enzyme": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", - "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", - "dev": true, - "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" - } - }, - "enzyme-adapter-react-16": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz", - "integrity": "sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA==", - "dev": true, - "requires": { - "enzyme-adapter-utils": "^1.12.1", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.3", - "object.assign": "^4.1.0", - "object.values": "^1.1.0", - "prop-types": "^15.7.2", - "react-is": "^16.10.2", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "enzyme-adapter-utils": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz", - "integrity": "sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g==", - "dev": true, - "requires": { - "airbnb-prop-types": "^2.15.0", - "function.prototype.name": "^1.1.1", - "object.assign": "^4.1.0", - "object.fromentries": "^2.0.1", - "prop-types": "^15.7.2", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "enzyme-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz", - "integrity": "sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ==", - "dev": true, - "requires": { - "has": "^1.0.3", - "object-is": "^1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1534,30 +1312,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "function.prototype.name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz", - "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1", - "functions-have-names": "^1.1.1", - "is-callable": "^1.1.4" - } - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "functions-have-names": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz", - "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==", - "dev": true - }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -1672,57 +1432,6 @@ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, - "html-element-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", - "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", - "dev": true, - "requires": { - "array-filter": "^1.0.0" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -1878,12 +1587,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -1919,12 +1622,6 @@ "is-extglob": "^2.1.1" } }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1945,18 +1642,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -2066,24 +1751,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -2758,12 +2425,6 @@ "minimist": "0.0.8" } }, - "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2786,19 +2447,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nearley": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz", - "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "moo": "^0.4.3", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6", - "semver": "^5.4.1" - } - }, "needle": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", @@ -2924,15 +2572,6 @@ "set-blocking": "~2.0.0" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -2954,12 +2593,6 @@ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", "dev": true }, - "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", - "dev": true - }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -3106,15 +2739,6 @@ "error-ex": "^1.2.0" } }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -3162,12 +2786,6 @@ "pify": "^2.0.0" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3281,48 +2899,12 @@ } } }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "dev": true, - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -3413,18 +2995,6 @@ "tiny-warning": "^1.0.0" } }, - "react-test-renderer": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.11.0.tgz", - "integrity": "sha512-nh9gDl8R4ut+ZNNb2EeKO5VMvTKxwzurbSMuGBoKtjpjbg8JK/u3eVPVNi1h1Ue+eYK9oSzJjb+K3lzLxyA4ag==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.17.0" - } - }, "react-transition-group": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", @@ -3490,12 +3060,6 @@ "resolve": "^1.1.6" } }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", - "dev": true - }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", @@ -3537,12 +3101,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -3551,16 +3109,6 @@ "glob": "^7.0.5" } }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -3731,17 +3279,6 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", - "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0", - "function-bind": "^1.1.1" - } - }, "string.prototype.trimleft": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", diff --git a/package.json b/package.json index 8c283866..efe1a83c 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,6 @@ }, "devDependencies": { "babel-eslint": "^10.0.3", - "enzyme": "^3.10.0", - "enzyme-adapter-react-16": "^1.15.1", "eslint": "^6.6.0", "eslint-config-airbnb": "^18.0.1", "eslint-import-resolver-meteor": "^0.4.0", From 8ca7b1f13991e91b8c1c9bcf5dbde4ddb336f05f Mon Sep 17 00:00:00 2001 From: Horus Lugo Date: Thu, 14 Nov 2019 11:02:17 +0100 Subject: [PATCH 43/43] Removes chimp-watch npm script and tests folder --- package.json | 3 +-- tests/lists.js | 23 ----------------------- 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 tests/lists.js diff --git a/package.json b/package.json index efe1a83c..5984dca9 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "test": "meteor test --once --driver-package dispatch:mocha-phantomjs", "test-watch": "meteor test --driver-package practicalmeteor:mocha", "test-app-watch": "meteor test --full-app --driver-package practicalmeteor:mocha", - "lint": "eslint --ext .js,.jsx .", - "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests" + "lint": "eslint --ext .js,.jsx ." }, "dependencies": { "@babel/runtime": "^7.7.2", diff --git a/tests/lists.js b/tests/lists.js deleted file mode 100644 index e97ae1d8..00000000 --- a/tests/lists.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-env mocha */ -// These are Chimp globals */ -/* globals browser assert */ - -const countLists = () => { - browser.waitForExist('.list-todo'); - const elements = browser.elements('.list-todo'); - return elements.value.length; -}; - -describe('list ui', () => { - beforeEach(() => { - browser.url('http://localhost:3000'); - }); - - it('can create a list @watch', () => { - const initialCount = countLists(); - - browser.click('.link-list-new'); - - assert.equal(countLists(), initialCount + 1); - }); -});