From f934aea2a5deb7c81d1e7291119b91d64837b72d Mon Sep 17 00:00:00 2001 From: Harry Adel Date: Wed, 18 Feb 2026 18:24:55 +0200 Subject: [PATCH] Return data on client (sync) and Promise on server (async) naturally, without wrapping in an extra Promise --- imports/reactiveCache.js | 225 +- models/activities.js | 64 +- models/boards.js | 191 +- models/cardComments.js | 12 +- models/cards.js | 77 +- models/checklistItems.js | 12 +- models/checklists.js | 5 +- models/invitationCodes.js | 4 +- models/lists.js | 38 +- models/rules.js | 20 +- models/swimlanes.js | 44 +- models/trelloCreator.js | 6 +- models/triggers.js | 16 +- models/users.js | 4 +- models/wekanCreator.js | 6 +- .../tests/package-lock.json | 3351 ----------------- .../meteor-reactive-cache/tests/package.json | 21 +- server/methods/positionHistory.js | 28 +- server/publications/boards.js | 6 +- server/publications/cards.js | 30 +- server/rulesHelper.js | 5 +- 21 files changed, 405 insertions(+), 3760 deletions(-) delete mode 100644 npm-packages/meteor-reactive-cache/tests/package-lock.json diff --git a/imports/reactiveCache.js b/imports/reactiveCache.js index fead3161f..83ee614fc 100644 --- a/imports/reactiveCache.js +++ b/imports/reactiveCache.js @@ -64,7 +64,7 @@ ReactiveCacheServer = { return ret; }, async getCards(selector = {}, options = {}, getQuery = false) { - let ret = Cards.find(selector, options, options); + let ret = Cards.find(selector, options); if (getQuery !== true) { ret = await ret.fetchAsync(); } @@ -997,68 +997,69 @@ ReactiveCacheClient = { // - The Programmer hasn't to care about in which context he call's this class // - having all queries together in 1 class to make it possible to see which queries in Wekan happens, e.g. with console.log // -// All methods are async for Meteor 3.0 compatibility. -// Server path uses async MongoDB operations; Client path uses sync Minimongo (wrapped in Promise). +// Methods are NOT async - they return a Promise on server (from async ReactiveCacheServer) +// and synchronous data on client (from ReactiveCacheClient). +// Server callers must await; client code uses the return value directly. ReactiveCache = { - async getBoard(idOrFirstObjectSelector = {}, options = {}) { + getBoard(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getBoard(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getBoard(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getBoard(idOrFirstObjectSelector, options); } }, - async getBoards(selector = {}, options = {}, getQuery = false) { + getBoards(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getBoards(selector, options, getQuery); + return ReactiveCacheServer.getBoards(selector, options, getQuery); } else { return ReactiveCacheClient.getBoards(selector, options, getQuery); } }, - async getList(idOrFirstObjectSelector = {}, options = {}) { + getList(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getList(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getList(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getList(idOrFirstObjectSelector, options); } }, - async getLists(selector = {}, options = {}, getQuery = false) { + getLists(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getLists(selector, options, getQuery); + return ReactiveCacheServer.getLists(selector, options, getQuery); } else { return ReactiveCacheClient.getLists(selector, options, getQuery); } }, - async getSwimlane(idOrFirstObjectSelector = {}, options = {}) { + getSwimlane(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getSwimlane(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getSwimlane(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getSwimlane(idOrFirstObjectSelector, options); } }, - async getSwimlanes(selector = {}, options = {}, getQuery = false) { + getSwimlanes(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getSwimlanes(selector, options, getQuery); + return ReactiveCacheServer.getSwimlanes(selector, options, getQuery); } else { return ReactiveCacheClient.getSwimlanes(selector, options, getQuery); } }, - async getChecklist(idOrFirstObjectSelector = {}, options = {}) { + getChecklist(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getChecklist(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getChecklist(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getChecklist(idOrFirstObjectSelector, options); } }, - async getChecklists(selector = {}, options = {}, getQuery = false) { + getChecklists(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getChecklists(selector, options, getQuery); + return ReactiveCacheServer.getChecklists(selector, options, getQuery); } else { return ReactiveCacheClient.getChecklists(selector, options, getQuery); } }, - async getChecklistItem(idOrFirstObjectSelector = {}, options = {}) { + getChecklistItem(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getChecklistItem( + return ReactiveCacheServer.getChecklistItem( idOrFirstObjectSelector, options, ); @@ -1069,30 +1070,30 @@ ReactiveCache = { ); } }, - async getChecklistItems(selector = {}, options = {}, getQuery = false) { + getChecklistItems(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getChecklistItems(selector, options, getQuery); + return ReactiveCacheServer.getChecklistItems(selector, options, getQuery); } else { return ReactiveCacheClient.getChecklistItems(selector, options, getQuery); } }, - async getCard(idOrFirstObjectSelector = {}, options = {}, noCache = false) { + getCard(idOrFirstObjectSelector = {}, options = {}, noCache = false) { if (Meteor.isServer || noCache === true) { - return await ReactiveCacheServer.getCard(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getCard(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getCard(idOrFirstObjectSelector, options); } }, - async getCards(selector = {}, options = {}, getQuery = false) { + getCards(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCards(selector, options, getQuery); + return ReactiveCacheServer.getCards(selector, options, getQuery); } else { return ReactiveCacheClient.getCards(selector, options, getQuery); } }, - async getCardComment(idOrFirstObjectSelector = {}, options = {}) { + getCardComment(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCardComment( + return ReactiveCacheServer.getCardComment( idOrFirstObjectSelector, options, ); @@ -1103,16 +1104,16 @@ ReactiveCache = { ); } }, - async getCardComments(selector = {}, options = {}, getQuery = false) { + getCardComments(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCardComments(selector, options, getQuery); + return ReactiveCacheServer.getCardComments(selector, options, getQuery); } else { return ReactiveCacheClient.getCardComments(selector, options, getQuery); } }, - async getCardCommentReaction(idOrFirstObjectSelector = {}, options = {}) { + getCardCommentReaction(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCardCommentReaction( + return ReactiveCacheServer.getCardCommentReaction( idOrFirstObjectSelector, options, ); @@ -1123,9 +1124,9 @@ ReactiveCache = { ); } }, - async getCardCommentReactions(selector = {}, options = {}, getQuery = false) { + getCardCommentReactions(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCardCommentReactions( + return ReactiveCacheServer.getCardCommentReactions( selector, options, getQuery, @@ -1138,9 +1139,9 @@ ReactiveCache = { ); } }, - async getCustomField(idOrFirstObjectSelector = {}, options = {}) { + getCustomField(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCustomField( + return ReactiveCacheServer.getCustomField( idOrFirstObjectSelector, options, ); @@ -1151,142 +1152,142 @@ ReactiveCache = { ); } }, - async getCustomFields(selector = {}, options = {}, getQuery = false) { + getCustomFields(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getCustomFields(selector, options, getQuery); + return ReactiveCacheServer.getCustomFields(selector, options, getQuery); } else { return ReactiveCacheClient.getCustomFields(selector, options, getQuery); } }, - async getAttachment(idOrFirstObjectSelector = {}, options = {}) { + getAttachment(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getAttachment(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getAttachment(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getAttachment(idOrFirstObjectSelector, options); } }, - async getAttachments(selector = {}, options = {}, getQuery = false) { + getAttachments(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getAttachments(selector, options, getQuery); + return ReactiveCacheServer.getAttachments(selector, options, getQuery); } else { return ReactiveCacheClient.getAttachments(selector, options, getQuery); } }, - async getAvatar(idOrFirstObjectSelector = {}, options = {}) { + getAvatar(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getAvatar(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getAvatar(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getAvatar(idOrFirstObjectSelector, options); } }, - async getAvatars(selector = {}, options = {}, getQuery = false) { + getAvatars(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getAvatars(selector, options, getQuery); + return ReactiveCacheServer.getAvatars(selector, options, getQuery); } else { return ReactiveCacheClient.getAvatars(selector, options, getQuery); } }, - async getUser(idOrFirstObjectSelector = {}, options = {}) { + getUser(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getUser(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getUser(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getUser(idOrFirstObjectSelector, options); } }, - async getUsers(selector = {}, options = {}, getQuery = false) { + getUsers(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getUsers(selector, options, getQuery); + return ReactiveCacheServer.getUsers(selector, options, getQuery); } else { return ReactiveCacheClient.getUsers(selector, options, getQuery); } }, - async getOrg(idOrFirstObjectSelector = {}, options = {}) { + getOrg(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getOrg(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getOrg(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getOrg(idOrFirstObjectSelector, options); } }, - async getOrgs(selector = {}, options = {}, getQuery = false) { + getOrgs(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getOrgs(selector, options, getQuery); + return ReactiveCacheServer.getOrgs(selector, options, getQuery); } else { return ReactiveCacheClient.getOrgs(selector, options, getQuery); } }, - async getTeam(idOrFirstObjectSelector = {}, options = {}) { + getTeam(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTeam(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getTeam(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getTeam(idOrFirstObjectSelector, options); } }, - async getTeams(selector = {}, options = {}, getQuery = false) { + getTeams(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTeams(selector, options, getQuery); + return ReactiveCacheServer.getTeams(selector, options, getQuery); } else { return ReactiveCacheClient.getTeams(selector, options, getQuery); } }, - async getActivity(idOrFirstObjectSelector = {}, options = {}) { + getActivity(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getActivity(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getActivity(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getActivity(idOrFirstObjectSelector, options); } }, - async getActivities(selector = {}, options = {}, getQuery = false) { + getActivities(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getActivities(selector, options, getQuery); + return ReactiveCacheServer.getActivities(selector, options, getQuery); } else { return ReactiveCacheClient.getActivities(selector, options, getQuery); } }, - async getRule(idOrFirstObjectSelector = {}, options = {}) { + getRule(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getRule(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getRule(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getRule(idOrFirstObjectSelector, options); } }, - async getRules(selector = {}, options = {}, getQuery = false) { + getRules(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getRules(selector, options, getQuery); + return ReactiveCacheServer.getRules(selector, options, getQuery); } else { return ReactiveCacheClient.getRules(selector, options, getQuery); } }, - async getAction(idOrFirstObjectSelector = {}, options = {}) { + getAction(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getAction(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getAction(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getAction(idOrFirstObjectSelector, options); } }, - async getActions(selector = {}, options = {}, getQuery = false) { + getActions(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getActions(selector, options, getQuery); + return ReactiveCacheServer.getActions(selector, options, getQuery); } else { return ReactiveCacheClient.getActions(selector, options, getQuery); } }, - async getTrigger(idOrFirstObjectSelector = {}, options = {}) { + getTrigger(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTrigger(idOrFirstObjectSelector, options); + return ReactiveCacheServer.getTrigger(idOrFirstObjectSelector, options); } else { return ReactiveCacheClient.getTrigger(idOrFirstObjectSelector, options); } }, - async getTriggers(selector = {}, options = {}, getQuery = false) { + getTriggers(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTriggers(selector, options, getQuery); + return ReactiveCacheServer.getTriggers(selector, options, getQuery); } else { return ReactiveCacheClient.getTriggers(selector, options, getQuery); } }, - async getImpersonatedUser(idOrFirstObjectSelector = {}, options = {}) { + getImpersonatedUser(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getImpersonatedUser( + return ReactiveCacheServer.getImpersonatedUser( idOrFirstObjectSelector, options, ); @@ -1297,9 +1298,9 @@ ReactiveCache = { ); } }, - async getImpersonatedUsers(selector = {}, options = {}, getQuery = false) { + getImpersonatedUsers(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getImpersonatedUsers( + return ReactiveCacheServer.getImpersonatedUsers( selector, options, getQuery, @@ -1312,9 +1313,9 @@ ReactiveCache = { ); } }, - async getIntegration(idOrFirstObjectSelector = {}, options = {}) { + getIntegration(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getIntegration( + return ReactiveCacheServer.getIntegration( idOrFirstObjectSelector, options, ); @@ -1325,27 +1326,27 @@ ReactiveCache = { ); } }, - async getIntegrations(selector = {}, options = {}, getQuery = false) { + getIntegrations(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getIntegrations(selector, options, getQuery); + return ReactiveCacheServer.getIntegrations(selector, options, getQuery); } else { return ReactiveCacheClient.getIntegrations(selector, options, getQuery); } }, - async getSessionData(idOrFirstObjectSelector = {}, options = {}) { + getSessionData(idOrFirstObjectSelector = {}, options = {}) { // no reactive cache, otherwise global search will not work anymore - return await ReactiveCacheServer.getSessionData( + return ReactiveCacheServer.getSessionData( idOrFirstObjectSelector, options, ); }, - async getSessionDatas(selector = {}, options = {}, getQuery = false) { + getSessionDatas(selector = {}, options = {}, getQuery = false) { // no reactive cache, otherwise global search will not work anymore - return await ReactiveCacheServer.getSessionDatas(selector, options, getQuery); + return ReactiveCacheServer.getSessionDatas(selector, options, getQuery); }, - async getInvitationCode(idOrFirstObjectSelector = {}, options = {}) { + getInvitationCode(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getInvitationCode( + return ReactiveCacheServer.getInvitationCode( idOrFirstObjectSelector, options, ); @@ -1356,30 +1357,30 @@ ReactiveCache = { ); } }, - async getInvitationCodes(selector = {}, options = {}, getQuery = false) { + getInvitationCodes(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getInvitationCodes(selector, options, getQuery); + return ReactiveCacheServer.getInvitationCodes(selector, options, getQuery); } else { return ReactiveCacheClient.getInvitationCodes(selector, options, getQuery); } }, - async getCurrentSetting() { + getCurrentSetting() { if (Meteor.isServer) { - return await ReactiveCacheServer.getCurrentSetting(); + return ReactiveCacheServer.getCurrentSetting(); } else { return ReactiveCacheClient.getCurrentSetting(); } }, - async getCurrentUser() { + getCurrentUser() { if (Meteor.isServer) { - return await ReactiveCacheServer.getCurrentUser(); + return ReactiveCacheServer.getCurrentUser(); } else { return ReactiveCacheClient.getCurrentUser(); } }, - async getTranslation(idOrFirstObjectSelector = {}, options = {}) { + getTranslation(idOrFirstObjectSelector = {}, options = {}) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTranslation( + return ReactiveCacheServer.getTranslation( idOrFirstObjectSelector, options, ); @@ -1390,9 +1391,9 @@ ReactiveCache = { ); } }, - async getTranslations(selector = {}, options = {}, getQuery = false) { + getTranslations(selector = {}, options = {}, getQuery = false) { if (Meteor.isServer) { - return await ReactiveCacheServer.getTranslations(selector, options, getQuery); + return ReactiveCacheServer.getTranslations(selector, options, getQuery); } else { return ReactiveCacheClient.getTranslations(selector, options, getQuery); } @@ -1401,41 +1402,41 @@ ReactiveCache = { // Server isn't reactive, so search for the data always. ReactiveMiniMongoIndexServer = { - getSubTasksWithParentId(parentId, addSelect = {}, options = {}) { + async getSubTasksWithParentId(parentId, addSelect = {}, options = {}) { let ret = []; if (parentId) { - ret = ReactiveCache.getCards({ parentId, ...addSelect }, options); + ret = await ReactiveCache.getCards({ parentId, ...addSelect }, options); } return ret; }, - getChecklistsWithCardId(cardId, addSelect = {}, options = {}) { + async getChecklistsWithCardId(cardId, addSelect = {}, options = {}) { let ret = []; if (cardId) { - ret = ReactiveCache.getChecklists({ cardId, ...addSelect }, options); + ret = await ReactiveCache.getChecklists({ cardId, ...addSelect }, options); } return ret; }, - getChecklistItemsWithChecklistId(checklistId, addSelect = {}, options = {}) { + async getChecklistItemsWithChecklistId(checklistId, addSelect = {}, options = {}) { let ret = []; if (checklistId) { - ret = ReactiveCache.getChecklistItems( + ret = await ReactiveCache.getChecklistItems( { checklistId, ...addSelect }, options, ); } return ret; }, - getCardCommentsWithCardId(cardId, addSelect = {}, options = {}) { + async getCardCommentsWithCardId(cardId, addSelect = {}, options = {}) { let ret = []; if (cardId) { - ret = ReactiveCache.getCardComments({ cardId, ...addSelect }, options); + ret = await ReactiveCache.getCardComments({ cardId, ...addSelect }, options); } return ret; }, - getActivityWithId(activityId, addSelect = {}, options = {}) { + async getActivityWithId(activityId, addSelect = {}, options = {}) { let ret = []; if (activityId) { - ret = ReactiveCache.getActivities( + ret = await ReactiveCache.getActivities( { _id: activityId, ...addSelect }, options, ); @@ -1507,12 +1508,6 @@ ReactiveMiniMongoIndexClient = { } ret = this.__checklistItemsWithId.get(EJSON.stringify(select)); if (ret) { - if (Meteor.isServer) { - ret[checklistId] = ReactiveCache.getChecklistItems( - { checklistId: checklistId, ...addSelect }, - options, - ); - } ret = ret[checklistId] || []; } } diff --git a/models/activities.js b/models/activities.js index 03d3df499..1ce7cc269 100644 --- a/models/activities.js +++ b/models/activities.js @@ -13,54 +13,54 @@ import { ReactiveCache } from '/imports/reactiveCache'; Activities = new Mongo.Collection('activities'); Activities.helpers({ - async board() { - return await ReactiveCache.getBoard(this.boardId); + board() { + return ReactiveCache.getBoard(this.boardId); }, - async oldBoard() { - return await ReactiveCache.getBoard(this.oldBoardId); + oldBoard() { + return ReactiveCache.getBoard(this.oldBoardId); }, - async user() { - return await ReactiveCache.getUser(this.userId); + user() { + return ReactiveCache.getUser(this.userId); }, - async member() { - return await ReactiveCache.getUser(this.memberId); + member() { + return ReactiveCache.getUser(this.memberId); }, - async list() { - return await ReactiveCache.getList(this.listId); + list() { + return ReactiveCache.getList(this.listId); }, - async swimlane() { - return await ReactiveCache.getSwimlane(this.swimlaneId); + swimlane() { + return ReactiveCache.getSwimlane(this.swimlaneId); }, - async oldSwimlane() { - return await ReactiveCache.getSwimlane(this.oldSwimlaneId); + oldSwimlane() { + return ReactiveCache.getSwimlane(this.oldSwimlaneId); }, - async oldList() { - return await ReactiveCache.getList(this.oldListId); + oldList() { + return ReactiveCache.getList(this.oldListId); }, - async card() { - return await ReactiveCache.getCard(this.cardId); + card() { + return ReactiveCache.getCard(this.cardId); }, - async comment() { - return await ReactiveCache.getCardComment(this.commentId); + comment() { + return ReactiveCache.getCardComment(this.commentId); }, - async attachment() { - return await ReactiveCache.getAttachment(this.attachmentId); + attachment() { + return ReactiveCache.getAttachment(this.attachmentId); }, - async checklist() { - return await ReactiveCache.getChecklist(this.checklistId); + checklist() { + return ReactiveCache.getChecklist(this.checklistId); }, - async checklistItem() { - return await ReactiveCache.getChecklistItem(this.checklistItemId); + checklistItem() { + return ReactiveCache.getChecklistItem(this.checklistItemId); }, - async subtasks() { - return await ReactiveCache.getCard(this.subtaskId); + subtasks() { + return ReactiveCache.getCard(this.subtaskId); }, - async customField() { - return await ReactiveCache.getCustomField(this.customFieldId); + customField() { + return ReactiveCache.getCustomField(this.customFieldId); }, - async label() { + label() { // Label activity did not work yet, unable to edit labels when tried this. - return await ReactiveCache.getCard(this.labelId); + return ReactiveCache.getCard(this.labelId); }, }); diff --git a/models/boards.js b/models/boards.js index ce8350e70..97d7b58f0 100644 --- a/models/boards.js +++ b/models/boards.js @@ -829,8 +829,8 @@ Boards.helpers({ }, - async cards() { - const ret = await ReactiveCache.getCards( + cards() { + const ret = ReactiveCache.getCards( { boardId: this._id, archived: false }, { sort: { title: 1 } }, ); @@ -841,12 +841,12 @@ Boards.helpers({ return this.draggableLists(); }, - async newestLists() { + newestLists() { // sorted lists from newest to the oldest, by its creation date or its cards' last modification date - const user = await ReactiveCache.getCurrentUser(); + const user = ReactiveCache.getCurrentUser(); const value = user._getListSortBy(); const sortKey = { starred: -1, [value[0]]: value[1] }; // [["starred",-1],value]; - return await ReactiveCache.getLists( + return ReactiveCache.getLists( { boardId: this._id, archived: false, @@ -855,8 +855,8 @@ Boards.helpers({ ); }, - async draggableLists() { - return await ReactiveCache.getLists( + draggableLists() { + return ReactiveCache.getLists( { boardId: this._id, }, @@ -867,28 +867,28 @@ Boards.helpers({ /** returns the last list * @returns Document the last list */ - async getLastList() { - const ret = await ReactiveCache.getList({ boardId: this._id }, { sort: { sort: 'desc' } }); + getLastList() { + const ret = ReactiveCache.getList({ boardId: this._id }, { sort: { sort: 'desc' } }); return ret; }, - async nullSortLists() { - return await ReactiveCache.getLists({ + nullSortLists() { + return ReactiveCache.getLists({ boardId: this._id, archived: false, sort: { $eq: null }, }); }, - async swimlanes() { - return await ReactiveCache.getSwimlanes( + swimlanes() { + return ReactiveCache.getSwimlanes( { boardId: this._id, archived: false }, { sort: { sort: 1 } }, ); }, - async nextSwimlane(swimlane) { - return await ReactiveCache.getSwimlane( + nextSwimlane(swimlane) { + return ReactiveCache.getSwimlane( { boardId: this._id, archived: false, @@ -901,16 +901,16 @@ Boards.helpers({ ); }, - async nullSortSwimlanes() { - return await ReactiveCache.getSwimlanes({ + nullSortSwimlanes() { + return ReactiveCache.getSwimlanes({ boardId: this._id, archived: false, sort: { $eq: null }, }); }, - async hasOvertimeCards() { - const card = await ReactiveCache.getCard({ + hasOvertimeCards() { + const card = ReactiveCache.getCard({ isOvertime: true, boardId: this._id, archived: false, @@ -918,8 +918,8 @@ Boards.helpers({ return card !== undefined; }, - async hasSpentTimeCards() { - const card = await ReactiveCache.getCard({ + hasSpentTimeCards() { + const card = ReactiveCache.getCard({ spentTime: { $gt: 0 }, boardId: this._id, archived: false, @@ -927,20 +927,19 @@ Boards.helpers({ return card !== undefined; }, - async activities() { + activities() { let linkedBoardId = [this._id]; - const cards = await ReactiveCache.getCards({ + ReactiveCache.getCards({ "type": "cardType-linkedBoard", "boardId": this._id - }); - for (const card of cards) { + }).forEach(card => { linkedBoardId.push(card.linkedId); - } - const ret = await ReactiveCache.getActivities({ boardId: { $in: linkedBoardId } }, { sort: { createdAt: -1 } }); + }); + const ret = ReactiveCache.getActivities({ boardId: { $in: linkedBoardId } }, { sort: { createdAt: -1 } }); return ret; }, - async activeMembers(){ + activeMembers(){ // Depend on the users collection for reactivity when users are loaded const memberUserIds = _.pluck(this.members, 'userId'); // Use findOne with limit for reactivity trigger instead of count() which loads all users @@ -954,19 +953,14 @@ Boards.helpers({ return selected; }); // Filter out members where user is not loaded - const filteredMembers = []; - for (const member of uniqueMembers) { - const user = await ReactiveCache.getUser(member.userId); - if (user !== undefined) { - filteredMembers.push(member); - } - } + const filteredMembers = uniqueMembers.filter(member => { + const user = ReactiveCache.getUser(member.userId); + return user !== undefined; + }); // Sort by role priority first (admin, normal, normal-assigned, no-comments, comment-only, comment-assigned, worker, read-only, read-assigned), then by fullname - // Build sort keys with async user lookup - const membersWithSortKey = []; - for (const member of filteredMembers) { - const user = await ReactiveCache.getUser(member.userId); + return _.sortBy(filteredMembers, member => { + const user = ReactiveCache.getUser(member.userId); let rolePriority = 8; // Default for normal if (member.isAdmin) rolePriority = 0; @@ -980,9 +974,8 @@ Boards.helpers({ else rolePriority = 1; // Normal const fullname = user ? user.profile.fullname : ''; - membersWithSortKey.push({ member, sortKey: rolePriority + '-' + fullname }); - } - return _.sortBy(membersWithSortKey, 'sortKey').map(item => item.member); + return rolePriority + '-' + fullname; + }); }, activeOrgs() { @@ -1005,8 +998,8 @@ Boards.helpers({ return _.where(this.members, { isActive: true, isAdmin: true }); }, - async memberUsers() { - return await ReactiveCache.getUsers({ _id: { $in: _.pluck(this.members, 'userId') } }); + memberUsers() { + return ReactiveCache.getUsers({ _id: { $in: _.pluck(this.members, 'userId') } }); }, getLabel(name, color) { @@ -1126,8 +1119,8 @@ Boards.helpers({ return `board-color-${this.color}`; }, - async customFields() { - const ret = await ReactiveCache.getCustomFields( + customFields() { + const ret = ReactiveCache.getCustomFields( { boardIds: { $in: [this._id] } }, { sort: { name: 1 } }, ); @@ -1156,7 +1149,7 @@ Boards.helpers({ } }, - async searchBoards(term) { + searchBoards(term) { check(term, Match.OneOf(String, null, undefined)); const query = { boardId: this._id }; @@ -1171,11 +1164,11 @@ Boards.helpers({ query.$or = [{ title: regex }, { description: regex }]; } - const ret = await ReactiveCache.getCards(query, projection); + const ret = ReactiveCache.getCards(query, projection); return ret; }, - async searchSwimlanes(term) { + searchSwimlanes(term) { check(term, Match.OneOf(String, null, undefined)); const query = { boardId: this._id }; @@ -1193,10 +1186,10 @@ Boards.helpers({ query.$or = [{ title: regex }, { description: regex }]; } - return await ReactiveCache.getSwimlanes(query, projection); + return ReactiveCache.getSwimlanes(query, projection); }, - async searchLists(term) { + searchLists(term) { let ret = null; if (term) { check(term, Match.OneOf(String)); @@ -1218,12 +1211,12 @@ Boards.helpers({ query.$or = [{ title: regex }, { description: regex }]; } - ret = await ReactiveCache.getLists(query, projection); + ret = ReactiveCache.getLists(query, projection); } return ret; }, - async searchCards(term, excludeLinked) { + searchCards(term, excludeLinked) { let ret = null; if (term) { check(term, Match.OneOf(String)); @@ -1249,7 +1242,7 @@ Boards.helpers({ { description: regex }, { customFields: { $elemMatch: { value: regex } } }, ]; - ret = await ReactiveCache.getCards(query, projection); + ret = ReactiveCache.getCards(query, projection); } return ret; }, @@ -1283,8 +1276,8 @@ Boards.helpers({ return this.subtasksDefaultBoardId; }, - async getDefaultSubtasksBoard() { - return await ReactiveCache.getBoard(this.getDefaultSubtasksBoardId()); + getDefaultSubtasksBoard() { + return ReactiveCache.getBoard(this.getDefaultSubtasksBoardId()); }, //Date Settings option such as received date, start date and so on. @@ -1316,8 +1309,8 @@ Boards.helpers({ return this.dateSettingsDefaultBoardId; }, - async getDefaultDateSettingsBoard() { - return await ReactiveCache.getBoard(this.getDefaultDateSettingsBoardId()); + getDefaultDateSettingsBoard() { + return ReactiveCache.getBoard(this.getDefaultDateSettingsBoardId()); }, getDefaultSubtasksListId() { @@ -1335,8 +1328,8 @@ Boards.helpers({ return this.subtasksDefaultListId; }, - async getDefaultSubtasksList() { - return await ReactiveCache.getList(this.getDefaultSubtasksListId()); + getDefaultSubtasksList() { + return ReactiveCache.getList(this.getDefaultSubtasksListId()); }, getDefaultDateSettingsListId() { @@ -1354,15 +1347,15 @@ Boards.helpers({ return this.dateSettingsDefaultListId; }, - async getDefaultDateSettingsList() { - return await ReactiveCache.getList(this.getDefaultDateSettingsListId()); + getDefaultDateSettingsList() { + return ReactiveCache.getList(this.getDefaultDateSettingsListId()); }, - async getDefaultSwimline() { - let result = await ReactiveCache.getSwimlane({ boardId: this._id }); + getDefaultSwimline() { + let result = ReactiveCache.getSwimlane({ boardId: this._id }); if (result === undefined) { // Check if any swimlane exists for this board to avoid duplicates - const existingSwimlanes = await ReactiveCache.getSwimlanes({ boardId: this._id }); + const existingSwimlanes = ReactiveCache.getSwimlanes({ boardId: this._id }); if (existingSwimlanes.length > 0) { // Use the first existing swimlane result = existingSwimlanes[0]; @@ -1373,14 +1366,14 @@ Boards.helpers({ title: title, boardId: this._id, }); - result = await ReactiveCache.getSwimlane({ boardId: this._id }); + result = ReactiveCache.getSwimlane({ boardId: this._id }); } } return result; }, - async getNextCardNumber() { - const boardCards = await ReactiveCache.getCard( + getNextCardNumber() { + const boardCards = ReactiveCache.getCard( { boardId: this._id }, @@ -1399,16 +1392,16 @@ Boards.helpers({ return maxCardNr + 1; }, - async cardsDueInBetween(start, end) { - const ret = await ReactiveCache.getCards({ + cardsDueInBetween(start, end) { + const ret = ReactiveCache.getCards({ boardId: this._id, dueAt: { $gte: start, $lte: end }, }); return ret; }, - async cardsInInterval(start, end) { - const ret = await ReactiveCache.getCards({ + cardsInInterval(start, end) { + const ret = ReactiveCache.getCards({ boardId: this._id, $or: [ { @@ -1756,7 +1749,9 @@ Boards.uniqueTitle = async title => { return title; }; -Boards.userSearch = async ( +// Non-async: returns data on client, Promise on server. +// Server callers must await. +Boards.userSearch = ( userId, selector = {}, projection = {}, @@ -1770,36 +1765,44 @@ Boards.userSearch = async ( if (userId) { selector.$or.push({ members: { $elemMatch: { userId, isActive: true } } }); } - const ret = await ReactiveCache.getBoards(selector, projection); - return ret; + return ReactiveCache.getBoards(selector, projection); }; -Boards.userBoards = async ( +// Non-async: returns data on client (for Blaze templates), Promise on server. +// Server callers must await. +Boards.userBoards = ( userId, archived = false, selector = {}, projection = {}, ) => { - const user = await ReactiveCache.getUser(userId); - if (!user) { - return []; - } + const _buildSelector = (user) => { + if (!user) return null; + if (typeof archived === 'boolean') { + selector.archived = archived; + } + if (!selector.type) { + selector.type = 'board'; + } + selector.$or = [ + { permission: 'public' }, + { members: { $elemMatch: { userId, isActive: true } } }, + { orgs: { $elemMatch: { orgId: { $in: user.orgIds() }, isActive: true } } }, + { teams: { $elemMatch: { teamId: { $in: user.teamIds() }, isActive: true } } }, + ]; + return selector; + }; - if (typeof archived === 'boolean') { - selector.archived = archived; + if (Meteor.isServer) { + return (async () => { + const user = await ReactiveCache.getUser(userId); + if (!_buildSelector(user)) return []; + return await ReactiveCache.getBoards(selector, projection); + })(); } - if (!selector.type) { - selector.type = 'board'; - } - - selector.$or = [ - { permission: 'public' }, - { members: { $elemMatch: { userId, isActive: true } } }, - { orgs: { $elemMatch: { orgId: { $in: user.orgIds() }, isActive: true } } }, - { teams: { $elemMatch: { teamId: { $in: user.teamIds() }, isActive: true } } }, - ]; - - return await ReactiveCache.getBoards(selector, projection); + const user = ReactiveCache.getUser(userId); + if (!_buildSelector(user)) return []; + return ReactiveCache.getBoards(selector, projection); }; Boards.userBoardIds = async (userId, archived = false, selector = {}) => { diff --git a/models/cardComments.js b/models/cardComments.js index 694d2187a..0d4d4e763 100644 --- a/models/cardComments.js +++ b/models/cardComments.js @@ -101,21 +101,21 @@ CardComments.helpers({ CardComments.insert(this); }, - async user() { - return await ReactiveCache.getUser(this.userId); + user() { + return ReactiveCache.getUser(this.userId); }, - async reactions() { - const cardCommentReactions = await ReactiveCache.getCardCommentReaction({cardCommentId: this._id}); + reactions() { + const cardCommentReactions = ReactiveCache.getCardCommentReaction({cardCommentId: this._id}); return !!cardCommentReactions ? cardCommentReactions.reactions : []; }, - async toggleReaction(reactionCodepoint) { + toggleReaction(reactionCodepoint) { if (reactionCodepoint !== sanitizeText(reactionCodepoint)) { return false; } else { - const cardCommentReactions = await ReactiveCache.getCardCommentReaction({cardCommentId: this._id}); + const cardCommentReactions = ReactiveCache.getCardCommentReaction({cardCommentId: this._id}); const reactions = !!cardCommentReactions ? cardCommentReactions.reactions : []; const userId = Meteor.userId(); const reaction = reactions.find(r => r.reactionCodepoint === reactionCodepoint); diff --git a/models/cards.js b/models/cards.js index d77958bef..5f606861c 100644 --- a/models/cards.js +++ b/models/cards.js @@ -701,16 +701,16 @@ Cards.helpers({ return Cards.insert(linkCard); }, - async list() { - return await ReactiveCache.getList(this.listId); + list() { + return ReactiveCache.getList(this.listId); }, - async swimlane() { - return await ReactiveCache.getSwimlane(this.swimlaneId); + swimlane() { + return ReactiveCache.getSwimlane(this.swimlaneId); }, - async board() { - const ret = await ReactiveCache.getBoard(this.boardId); + board() { + const ret = ReactiveCache.getBoard(this.boardId); return ret; }, @@ -725,8 +725,8 @@ Cards.helpers({ return this.__id; }, - async getList() { - const list = await this.list(); + getList() { + const list = this.list(); if (!list) { return { _id: this.listId, @@ -738,8 +738,8 @@ Cards.helpers({ return list; }, - async getSwimlane() { - const swimlane = await this.swimlane(); + getSwimlane() { + const swimlane = this.swimlane(); if (!swimlane) { return { _id: this.swimlaneId, @@ -751,8 +751,8 @@ Cards.helpers({ return swimlane; }, - async getBoard() { - const board = await this.board(); + getBoard() { + const board = this.board(); if (!board) { return { _id: this.boardId, @@ -764,9 +764,8 @@ Cards.helpers({ return board; }, - async labels() { - const board = await this.board(); - const boardLabels = board.labels; + labels() { + const boardLabels = this.board().labels; const cardLabels = _.filter(boardLabels, label => { return _.contains(this.labelIds, label._id); }); @@ -782,7 +781,7 @@ Cards.helpers({ * @param swimlaneId a swimlane id * top sorting of the card at the top if true, or from the bottom if false */ - async getSort(listId, swimlaneId, top) { + getSort(listId, swimlaneId, top) { if (!_.isBoolean(top)) { top = true; } @@ -798,7 +797,7 @@ Cards.helpers({ archived: false, }; const sorting = top ? 1 : -1; - const card = await ReactiveCache.getCard(selector, { sort: { sort: sorting } }, true); + const card = ReactiveCache.getCard(selector, { sort: { sort: sorting } }, true); let ret = null if (card) { ret = card.sort; @@ -810,8 +809,8 @@ Cards.helpers({ * @param listId a list id * @param swimlaneId a swimlane id */ - async getMinSort(listId, swimlaneId) { - const ret = await this.getSort(listId, swimlaneId, true); + getMinSort(listId, swimlaneId) { + const ret = this.getSort(listId, swimlaneId, true); return ret; }, @@ -819,40 +818,40 @@ Cards.helpers({ * @param listId a list id * @param swimlaneId a swimlane id */ - async getMaxSort(listId, swimlaneId) { - const ret = await this.getSort(listId, swimlaneId, false); + getMaxSort(listId, swimlaneId) { + const ret = this.getSort(listId, swimlaneId, false); return ret; }, - async user() { - return await ReactiveCache.getUser(this.userId); + user() { + return ReactiveCache.getUser(this.userId); }, - async isAssigned(memberId) { - return _.contains(await this.getMembers(), memberId); + isAssigned(memberId) { + return _.contains(this.getMembers(), memberId); }, - async isAssignee(assigneeId) { - return _.contains(await this.getAssignees(), assigneeId); + isAssignee(assigneeId) { + return _.contains(this.getAssignees(), assigneeId); }, - async activities() { + activities() { let ret; if (this.isLinkedBoard()) { - ret = await ReactiveCache.getActivities( + ret = ReactiveCache.getActivities( { boardId: this.linkedId }, { sort: { createdAt: -1 } }, ); } else { - ret = await ReactiveCache.getActivities({ cardId: this.getRealId() }, { sort: { createdAt: -1 } }); + ret = ReactiveCache.getActivities({ cardId: this.getRealId() }, { sort: { createdAt: -1 } }); } return ret; }, - async comments() { + comments() { let ret if (this.isLinkedBoard()) { - ret = await ReactiveCache.getCardComments( + ret = ReactiveCache.getCardComments( { boardId: this.linkedId }, { sort: { createdAt: -1 } }, ); @@ -866,18 +865,18 @@ Cards.helpers({ return ret; }, - async attachments() { - const ret = (await ReactiveCache.getAttachments( + attachments() { + const ret = ReactiveCache.getAttachments( { 'meta.cardId': this.getRealId() }, { sort: { uploadedAt: -1 } }, true, - )).each(); + ).each(); return ret; }, - async cover() { + cover() { if (!this.coverId) return false; - const cover = await ReactiveCache.getAttachment(this.coverId); + const cover = ReactiveCache.getAttachment(this.coverId); // if we return a cover before it is fully stored, we will get errors when we try to display it // todo XXX we could return a default "upload pending" image in the meantime? return cover && cover.link() && cover; @@ -983,9 +982,9 @@ Cards.helpers({ }, // customFields with definitions - async customFieldsWD() { + customFieldsWD() { // get all definitions - const definitions = await ReactiveCache.getCustomFields({ + const definitions = ReactiveCache.getCustomFields({ boardIds: { $in: [this.boardId] }, }); if (!definitions) { diff --git a/models/checklistItems.js b/models/checklistItems.js index a1d1f24b7..a6eb524aa 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -163,7 +163,10 @@ async function publishChekListCompleted(userId, doc) { const boardId = card.boardId; const checklistId = doc.checklistId; const checkList = await ReactiveCache.getChecklist(checklistId); - if (checkList.isFinished()) { + const checklistItems = await ReactiveCache.getChecklistItems({ checklistId }); + const isChecklistFinished = checkList.hideAllChecklistItems || + (checklistItems.length > 0 && checklistItems.length === checklistItems.filter(i => i.isFinished).length); + if (isChecklistFinished) { const act = { userId, activityType: 'completeChecklist', @@ -187,7 +190,7 @@ async function publishChekListUncompleted(userId, doc) { // Currently in checklist all are set as uncompleted/not checked, // IFTTT Rule does not move card to other list. // If following line is negated/changed to: - // if(!checkList.isFinished()){ + // if(!isChecklistFinished){ // then unchecking of any checkbox will move card to other list, // even when all checkboxes are not yet unchecked. // What is correct code for only moving when all in list is unchecked? @@ -196,7 +199,10 @@ async function publishChekListUncompleted(userId, doc) { // find . | xargs grep 'count' -sl | grep -v .meteor | grep -v node_modules | grep -v .build // Maybe something related here? // wekan/client/components/rules/triggers/checklistTriggers.js - if (checkList.isFinished()) { + const uncheckItems = await ReactiveCache.getChecklistItems({ checklistId }); + const isChecklistFinished = checkList.hideAllChecklistItems || + (uncheckItems.length > 0 && uncheckItems.length === uncheckItems.filter(i => i.isFinished).length); + if (isChecklistFinished) { const act = { userId, activityType: 'uncompleteChecklist', diff --git a/models/checklists.js b/models/checklists.js index aa0da7b05..9f0cbc333 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -161,9 +161,8 @@ Checklists.helpers({ await item.uncheck(); } }, - async itemIndex(itemId) { - const checklist = await ReactiveCache.getChecklist({ _id: this._id }); - const items = checklist.items; + itemIndex(itemId) { + const items = ReactiveCache.getChecklist({ _id: this._id }).items; return _.pluck(items, '_id').indexOf(itemId); }, diff --git a/models/invitationCodes.js b/models/invitationCodes.js index 1fe84de7a..31e4b4016 100644 --- a/models/invitationCodes.js +++ b/models/invitationCodes.js @@ -55,8 +55,8 @@ InvitationCodes.attachSchema( ); InvitationCodes.helpers({ - async author() { - return await ReactiveCache.getUser(this.authorId); + author() { + return ReactiveCache.getUser(this.authorId); }, }); diff --git a/models/lists.js b/models/lists.js index ec4ddbb19..c2df2acd9 100644 --- a/models/lists.js +++ b/models/lists.js @@ -259,37 +259,37 @@ Lists.helpers({ } }, - async cards(swimlaneId) { + cards(swimlaneId) { const selector = { listId: this._id, archived: false, }; if (swimlaneId) selector.swimlaneId = swimlaneId; - const ret = await ReactiveCache.getCards(Filter.mongoSelector(selector), { sort: ['sort'] }); + const ret = ReactiveCache.getCards(Filter.mongoSelector(selector), { sort: ['sort'] }); return ret; }, - async cardsUnfiltered(swimlaneId) { + cardsUnfiltered(swimlaneId) { const selector = { listId: this._id, archived: false, }; if (swimlaneId) selector.swimlaneId = swimlaneId; - const ret = await ReactiveCache.getCards(selector, { sort: ['sort'] }); + const ret = ReactiveCache.getCards(selector, { sort: ['sort'] }); return ret; }, - async allCards() { - const ret = await ReactiveCache.getCards({ listId: this._id }); + allCards() { + const ret = ReactiveCache.getCards({ listId: this._id }); return ret; }, - async board() { - return await ReactiveCache.getBoard(this.boardId); + board() { + return ReactiveCache.getBoard(this.boardId); }, - async getWipLimit(option) { - const list = await ReactiveCache.getList(this._id); + getWipLimit(option) { + const list = ReactiveCache.getList(this._id); if (!list.wipLimit) { // Necessary check to avoid exceptions for the case where the doc doesn't have the wipLimit field yet set return 0; @@ -313,9 +313,9 @@ Lists.helpers({ return this.starred === true; }, - async isCollapsed() { + isCollapsed() { if (Meteor.isClient) { - const user = await ReactiveCache.getCurrentUser(); + const user = ReactiveCache.getCurrentUser(); // Logged-in users: prefer profile/cookie-backed state if (user && user.getCollapsedListFromStorage) { const stored = user.getCollapsedListFromStorage(this.boardId, this._id); @@ -334,13 +334,13 @@ Lists.helpers({ return this.collapsed === true; }, - async absoluteUrl() { - const card = await ReactiveCache.getCard({ listId: this._id }); - return card && (await card.absoluteUrl()); + absoluteUrl() { + const card = ReactiveCache.getCard({ listId: this._id }); + return card && card.absoluteUrl(); }, - async originRelativeUrl() { - const card = await ReactiveCache.getCard({ listId: this._id }); - return card && (await card.originRelativeUrl()); + originRelativeUrl() { + const card = ReactiveCache.getCard({ listId: this._id }); + return card && card.originRelativeUrl(); }, async remove() { return await Lists.removeAsync({ _id: this._id }); @@ -492,7 +492,7 @@ Meteor.methods({ // my lists const lists = await ReactiveCache.getLists( { - boardId: { $in: Boards.userBoardIds(this.userId) }, + boardId: { $in: await Boards.userBoardIds(this.userId) }, archived: false, }, { diff --git a/models/rules.js b/models/rules.js index 127e8fb3c..9a5d052e4 100644 --- a/models/rules.js +++ b/models/rules.js @@ -54,20 +54,20 @@ Rules.helpers({ async rename(description) { return await Rules.updateAsync(this._id, { $set: { description } }); }, - async getAction() { - return await ReactiveCache.getAction(this.actionId); + getAction() { + return ReactiveCache.getAction(this.actionId); }, - async getTrigger() { - return await ReactiveCache.getTrigger(this.triggerId); + getTrigger() { + return ReactiveCache.getTrigger(this.triggerId); }, - async board() { - return await ReactiveCache.getBoard(this.boardId); + board() { + return ReactiveCache.getBoard(this.boardId); }, - async trigger() { - return await ReactiveCache.getTrigger(this.triggerId); + trigger() { + return ReactiveCache.getTrigger(this.triggerId); }, - async action() { - return await ReactiveCache.getAction(this.actionId); + action() { + return ReactiveCache.getAction(this.actionId); }, }); diff --git a/models/swimlanes.js b/models/swimlanes.js index 8f38bf7aa..beebaefb6 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -215,8 +215,8 @@ Swimlanes.helpers({ (await this.board()).getDefaultSwimline(); }, - async cards() { - const ret = await ReactiveCache.getCards( + cards() { + const ret = ReactiveCache.getCards( Filter.mongoSelector({ swimlaneId: this._id, archived: false, @@ -226,12 +226,12 @@ Swimlanes.helpers({ return ret; }, - async lists() { - return await this.draggableLists(); + lists() { + return this.draggableLists(); }, - async newestLists() { + newestLists() { // Revert to shared lists across swimlanes: filter by board only - return await ReactiveCache.getLists( + return ReactiveCache.getLists( { boardId: this.boardId, archived: false, @@ -239,9 +239,9 @@ Swimlanes.helpers({ { sort: { modifiedAt: -1 } }, ); }, - async draggableLists() { + draggableLists() { // Revert to shared lists across swimlanes: filter by board only - return await ReactiveCache.getLists( + return ReactiveCache.getLists( { boardId: this.boardId, //archived: false, @@ -250,9 +250,9 @@ Swimlanes.helpers({ ); }, - async myLists() { + myLists() { // Return per-swimlane lists: provide lists specific to this swimlane - return await ReactiveCache.getLists( + return ReactiveCache.getLists( { boardId: this.boardId, swimlaneId: this._id, @@ -262,14 +262,14 @@ Swimlanes.helpers({ ); }, - async allCards() { - const ret = await ReactiveCache.getCards({ swimlaneId: this._id }); + allCards() { + const ret = ReactiveCache.getCards({ swimlaneId: this._id }); return ret; }, - async isCollapsed() { + isCollapsed() { if (Meteor.isClient) { - const user = await ReactiveCache.getCurrentUser(); + const user = ReactiveCache.getCurrentUser(); if (user && user.getCollapsedSwimlaneFromStorage) { const stored = user.getCollapsedSwimlaneFromStorage(this.boardId, this._id); if (typeof stored === 'boolean') { @@ -286,8 +286,8 @@ Swimlanes.helpers({ return this.collapsed === true; }, - async board() { - return await ReactiveCache.getBoard(this.boardId); + board() { + return ReactiveCache.getBoard(this.boardId); }, colorClass() { @@ -303,18 +303,18 @@ Swimlanes.helpers({ return this.type === 'template-container'; }, - async isListTemplatesSwimlane() { - const user = await ReactiveCache.getCurrentUser(); + isListTemplatesSwimlane() { + const user = ReactiveCache.getCurrentUser(); return (user.profile || {}).listTemplatesSwimlaneId === this._id; }, - async isCardTemplatesSwimlane() { - const user = await ReactiveCache.getCurrentUser(); + isCardTemplatesSwimlane() { + const user = ReactiveCache.getCurrentUser(); return (user.profile || {}).cardTemplatesSwimlaneId === this._id; }, - async isBoardTemplatesSwimlane() { - const user = await ReactiveCache.getCurrentUser(); + isBoardTemplatesSwimlane() { + const user = ReactiveCache.getCurrentUser(); return (user.profile || {}).boardTemplatesSwimlaneId === this._id; }, diff --git a/models/trelloCreator.js b/models/trelloCreator.js index 1ee3cae9c..71ad277ba 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -181,7 +181,7 @@ export class TrelloCreator { } // You must call parseActions before calling this one. - createBoardAndLabels(trelloBoard) { + async createBoardAndLabels(trelloBoard) { let color = 'blue'; if (this.getColor(trelloBoard.prefs.background) !== undefined) { color = this.getColor(trelloBoard.prefs.background); @@ -207,7 +207,7 @@ export class TrelloCreator { permission: this.getPermission(trelloBoard.prefs.permissionLevel), slug: getSlug(trelloBoard.name) || 'board', stars: 0, - title: Boards.uniqueTitle(trelloBoard.name), + title: await Boards.uniqueTitle(trelloBoard.name), }; // now add other members if (trelloBoard.memberships) { @@ -779,7 +779,7 @@ export class TrelloCreator { await currentBoard.archive(); } this.parseActions(board.actions); - const boardId = this.createBoardAndLabels(board); + const boardId = await this.createBoardAndLabels(board); this.createLists(board.lists, boardId); this.createSwimlanes(boardId); this.createCards(board.cards, boardId); diff --git a/models/triggers.js b/models/triggers.js index 4173ce5f8..8c46ced06 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -36,20 +36,20 @@ Triggers.helpers({ return this.desc; }, - async getRule() { - return await ReactiveCache.getRule({ triggerId: this._id }); + getRule() { + return ReactiveCache.getRule({ triggerId: this._id }); }, - async fromList() { - return await ReactiveCache.getList(this.fromId); + fromList() { + return ReactiveCache.getList(this.fromId); }, - async toList() { - return await ReactiveCache.getList(this.toId); + toList() { + return ReactiveCache.getList(this.toId); }, - async findList(title) { - return await ReactiveCache.getList({ + findList(title) { + return ReactiveCache.getList({ title, }); }, diff --git a/models/users.js b/models/users.js index 1ef6feddc..253f1b699 100644 --- a/models/users.js +++ b/models/users.js @@ -902,10 +902,10 @@ if (Meteor.isClient) { return board && board.hasWorker(this._id); }, - async isBoardAdmin(boardId) { + isBoardAdmin(boardId) { let board; if (boardId) { - board = await ReactiveCache.getBoard(boardId); + board = ReactiveCache.getBoard(boardId); } else { board = Utils.getCurrentBoard(); } diff --git a/models/wekanCreator.js b/models/wekanCreator.js index a37ceb0c8..96e1f30fe 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -280,7 +280,7 @@ export class WekanCreator { } // You must call parseActions before calling this one. - createBoardAndLabels(boardToImport) { + async createBoardAndLabels(boardToImport) { const boardToCreate = { archived: boardToImport.archived, color: boardToImport.color, @@ -304,7 +304,7 @@ export class WekanCreator { permission: boardToImport.permission, slug: getSlug(boardToImport.title) || 'board', stars: 0, - title: Boards.uniqueTitle(boardToImport.title), + title: await Boards.uniqueTitle(boardToImport.title), }; // now add other members if (boardToImport.members) { @@ -982,7 +982,7 @@ export class WekanCreator { await currentBoard.archive(); } this.parseActivities(board); - const boardId = this.createBoardAndLabels(board); + const boardId = await this.createBoardAndLabels(board); this.createLists(board.lists, boardId); this.createSwimlanes(board.swimlanes, boardId); this.createCustomFields(board.customFields, boardId); diff --git a/npm-packages/meteor-reactive-cache/tests/package-lock.json b/npm-packages/meteor-reactive-cache/tests/package-lock.json deleted file mode 100644 index 6eb038f73..000000000 --- a/npm-packages/meteor-reactive-cache/tests/package-lock.json +++ /dev/null @@ -1,3351 +0,0 @@ -{ - "name": "tests", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/runtime": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz", - "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==", - "requires": { - "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } - } - }, - "@types/node": { - "version": "8.10.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.38.tgz", - "integrity": "sha512-EibsnbJerd0hBFaDjJStFrVbVBAtOy4dgL8zZFw0uOvPqzBAX59Ci8cgjg3+RgJIWhsB5A4c+pi+D4P9tQQh/A==", - "dev": true - }, - "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "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": "3.1.0", - "resolved": "http://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=", - "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" - } - }, - "argparse": { - "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.2" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "^0.4.1", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "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 - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "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 - }, - "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" - } - }, - "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 - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "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=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "1.0.4", - "resolved": "http://registry.npmjs.org/commander/-/commander-1.0.4.tgz", - "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=", - "dev": true, - "requires": { - "keypress": "0.1.x" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://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" - } - }, - "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" - } - } - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "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 - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-defaults": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/deep-defaults/-/deep-defaults-1.0.5.tgz", - "integrity": "sha512-5ev/sNkiHTmeTqbDJEDgdQa/Ub0eOMQNix9l+dLLGbwOos7/in5HdvHXI014wqxsET4YeJG9Eq4qj0PJRL8rSw==", - "dev": true, - "requires": { - "lodash": "^4.17.5" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "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==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz", - "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==", - "dev": true, - "requires": { - "@types/node": "^8.0.24", - "electron-download": "^3.0.1", - "extract-zip": "^1.0.3" - } - }, - "electron-download": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", - "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", - "dev": true, - "requires": { - "debug": "^2.2.0", - "fs-extra": "^0.30.0", - "home-path": "^1.0.1", - "minimist": "^1.2.0", - "nugget": "^2.0.0", - "path-exists": "^2.1.0", - "rc": "^1.1.2", - "semver": "^5.3.0", - "sumchecker": "^1.2.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" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "enqueue": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enqueue/-/enqueue-1.0.2.tgz", - "integrity": "sha1-kBTpvOVw7pPKlubI5jrVTBkra8g=", - "dev": true, - "requires": { - "sliced": "0.0.5" - }, - "dependencies": { - "sliced": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", - "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=", - "dev": true - } - } - }, - "error-ex": { - "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" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "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": { - "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": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", - "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "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": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - } - }, - "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.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": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-meteor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-5.1.0.tgz", - "integrity": "sha512-0/mQ0vOhmJQSDbhU84CsLGFEq967ye6sqyJKG/H8Nwv3+Ti1ayfsKqI0iEK85NcI8v6jJ7o/0EHkHg14bcLbaw==", - "dev": true, - "requires": { - "invariant": "2.2.4" - } - }, - "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=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "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==", - "dev": true - }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "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.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" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "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": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "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=", - "dev": true, - "requires": { - "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=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function-source": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/function-source/-/function-source-0.1.0.tgz", - "integrity": "sha1-2RBL8+RniLVUaMAr8bL6vPj8Ga8=", - "dev": true - }, - "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 - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - }, - "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "home-path": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz", - "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "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" - } - }, - "ignore": { - "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 - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "inflight": { - "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" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "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.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 - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-symbol": { - "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" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "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 - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keypress": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", - "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "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 - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "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.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "meteor-globals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/meteor-globals/-/meteor-globals-1.1.1.tgz", - "integrity": "sha1-l+9EwxhS1a98K5Zy3j3dxbmOyxM=", - "requires": { - "semver": "5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", - "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.11.0", - "domain-browser": "^1.1.7", - "events": "^1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "^0.2.1", - "path-browserify": "0.0.0", - "process": "^0.11.9", - "punycode": "^1.4.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^2.3.6", - "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", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "asn1.js": { - "version": "4.10.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "bundled": true, - "requires": { - "util": "0.10.3" - } - }, - "base64-js": { - "version": "1.3.0", - "bundled": true - }, - "bn.js": { - "version": "4.11.8", - "bundled": true - }, - "brorand": { - "version": "1.1.0", - "bundled": true - }, - "browserify-aes": { - "version": "1.2.0", - "bundled": true, - "requires": { - "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": { - "version": "1.0.1", - "bundled": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.1", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "bundled": true, - "requires": { - "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": { - "version": "0.1.4", - "bundled": true, - "requires": { - "pako": "~0.2.0" - } - }, - "buffer": { - "version": "4.9.1", - "bundled": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "bundled": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "bundled": true - }, - "cipher-base": { - "version": "1.0.4", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "console-browserify": { - "version": "1.1.0", - "bundled": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "create-ecdh": { - "version": "4.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "bundled": true, - "requires": { - "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": { - "version": "3.12.0", - "bundled": true, - "requires": { - "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": { - "version": "0.1.4", - "bundled": true - }, - "des.js": { - "version": "1.0.0", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "bundled": true - }, - "elliptic": { - "version": "6.4.0", - "bundled": true, - "requires": { - "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": { - "version": "1.1.1", - "bundled": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "bundled": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "hash-base": { - "version": "3.0.4", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "bundled": true - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "bundled": true - }, - "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", - "bundled": true - }, - "inherits": { - "version": "2.0.1", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "md5.js": { - "version": "1.3.4", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "bundled": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "bundled": true - }, - "os-browserify": { - "version": "0.2.1", - "bundled": true - }, - "pako": { - "version": "0.2.9", - "bundled": true - }, - "parse-asn1": { - "version": "5.1.1", - "bundled": true, - "requires": { - "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": { - "version": "0.0.0", - "bundled": true - }, - "pbkdf2": { - "version": "3.0.16", - "bundled": true, - "requires": { - "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": { - "version": "0.11.10", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "public-encrypt": { - "version": "4.0.2", - "bundled": true, - "requires": { - "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": { - "version": "1.4.1", - "bundled": true - }, - "querystring": { - "version": "0.2.0", - "bundled": true - }, - "querystring-es3": { - "version": "0.2.1", - "bundled": true - }, - "randombytes": { - "version": "2.0.6", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "bundled": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "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.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "bundled": true - } - } - }, - "ripemd160": { - "version": "2.0.2", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "sha.js": { - "version": "2.4.11", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "stream-browserify": { - "version": "2.0.1", - "bundled": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.1", - "bundled": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "timers-browserify": { - "version": "1.4.2", - "bundled": true, - "requires": { - "process": "~0.11.0" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, - "tty-browserify": { - "version": "0.0.0", - "bundled": true - }, - "url": { - "version": "0.11.0", - "bundled": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "bundled": true - } - } - }, - "util": { - "version": "0.10.3", - "bundled": true, - "requires": { - "inherits": "2.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } - }, - "xtend": { - "version": "4.0.1", - "bundled": true - } - } - }, - "meteor-reactive-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/meteor-reactive-cache/-/meteor-reactive-cache-1.0.1.tgz", - "integrity": "sha512-eH8mchIOby3/3znoVDKPY0YHl+Dy8t872kLNFRhSlZHpe9w260riPvXqJ6DOeAsaGRCVOx5+PZT1WS3oGe06lA==", - "requires": { - "meteor-globals": "1.1.1" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "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==", - "dev": true - }, - "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" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minstache": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minstache/-/minstache-1.2.0.tgz", - "integrity": "sha1-/xzEA6woRPaNvxjGYhKb5+sO/EE=", - "dev": true, - "requires": { - "commander": "1.0.4" - } - }, - "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" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "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" - } - }, - "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", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "multiline": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "dev": true, - "requires": { - "strip-indent": "^1.0.0" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nightmare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nightmare/-/nightmare-3.0.1.tgz", - "integrity": "sha512-WptvyPfp5mHRRYHzt6+4xazaR9cc437BuLJI6cLFnqwwgxgdtsFImfBVDeTUCPAeLrkp5VryX5jlw7Wwg+UnFQ==", - "dev": true, - "requires": { - "debug": "^2.2.0", - "deep-defaults": "^1.0.3", - "defaults": "^1.0.2", - "electron": "^1.8.4", - "enqueue": "^1.0.2", - "function-source": "^0.1.0", - "jsesc": "^0.5.0", - "minstache": "^1.2.0", - "mkdirp": "^0.5.1", - "multiline": "^1.0.2", - "once": "^1.3.3", - "rimraf": "^2.4.3", - "sliced": "1.0.1", - "split2": "^2.0.1" - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, - "requires": { - "debug": "^2.1.3", - "minimist": "^1.1.0", - "pretty-bytes": "^1.0.2", - "progress-stream": "^1.1.0", - "request": "^2.45.0", - "single-line-log": "^1.1.2", - "throttleit": "0.0.2" - }, - "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" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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 - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "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=", - "dev": true - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "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=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "once": { - "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": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "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-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "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-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "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.0" - } - }, - "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 - }, - "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=", - "dev": true - }, - "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": { - "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 - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "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": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "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": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "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 - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" - } - }, - "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==", - "dev": true - }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, - "requires": { - "speedometer": "~0.1.2", - "through2": "~0.2.3" - } - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true - }, - "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 - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "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": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.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" - } - } - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "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.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://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.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "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" - } - }, - "rimraf": { - "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" - } - }, - "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" - } - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, - "requires": { - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "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" - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", - "dev": true - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://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" - } - }, - "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" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.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" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "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" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "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 - }, - "sumchecker": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", - "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", - "dev": true, - "requires": { - "debug": "^2.2.0", - "es6-promise": "^4.0.5" - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", - "dev": true, - "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "0.2.3", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9", - "xtend": "~2.1.1" - } - }, - "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" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "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=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "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" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "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=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - }, - "dependencies": { - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - } - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "~1.0.1" - } - } - } -} diff --git a/npm-packages/meteor-reactive-cache/tests/package.json b/npm-packages/meteor-reactive-cache/tests/package.json index 95dc7acf8..0c2063900 100644 --- a/npm-packages/meteor-reactive-cache/tests/package.json +++ b/npm-packages/meteor-reactive-cache/tests/package.json @@ -12,7 +12,7 @@ "plugins": [ "meteor" ], - "parser": "babel-eslint", + "parser": "@babel/eslint-parser", "rules": { "meteor/audit-argument-checks": 0, "import/no-extraneous-dependencies": 0, @@ -22,18 +22,19 @@ } }, "dependencies": { - "@babel/runtime": "^7.1.5", - "meteor-node-stubs": "0.4.1", + "@babel/runtime": "^7.26.0", + "meteor-node-stubs": "^1.2.13", "meteor-reactive-cache": "^1.0.1" }, "devDependencies": { - "chai": "^4.2.0", - "eslint": "5.9.0", - "eslint-config-airbnb-base": "13.1.0", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-meteor": "5.1.0", + "@babel/core": "^7.26.0", + "@babel/eslint-parser": "^7.25.9", + "chai": "^4.5.0", + "eslint": "^8.57.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-meteor": "^7.3.0", "lodash.isequal": "^4.5.0", - "mocha": "^5.2.0", - "nightmare": "3.0.1" + "mocha": "^10.8.2" } } diff --git a/server/methods/positionHistory.js b/server/methods/positionHistory.js index 63369cfca..95a585a88 100644 --- a/server/methods/positionHistory.js +++ b/server/methods/positionHistory.js @@ -20,7 +20,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const swimlane = Swimlanes.findOne(swimlaneId); + const swimlane = await Swimlanes.findOneAsync(swimlaneId); if (!swimlane) { throw new Meteor.Error('swimlane-not-found', 'Swimlane not found'); } @@ -43,7 +43,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const list = Lists.findOne(listId); + const list = await Lists.findOneAsync(listId); if (!list) { throw new Meteor.Error('list-not-found', 'List not found'); } @@ -66,7 +66,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const card = Cards.findOne(cardId); + const card = await Cards.findOneAsync(cardId); if (!card) { throw new Meteor.Error('card-not-found', 'Card not found'); } @@ -89,7 +89,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const swimlane = Swimlanes.findOne(swimlaneId); + const swimlane = await Swimlanes.findOneAsync(swimlaneId); if (!swimlane) { throw new Meteor.Error('swimlane-not-found', 'Swimlane not found'); } @@ -112,7 +112,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const list = Lists.findOne(listId); + const list = await Lists.findOneAsync(listId); if (!list) { throw new Meteor.Error('list-not-found', 'List not found'); } @@ -135,7 +135,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const card = Cards.findOne(cardId); + const card = await Cards.findOneAsync(cardId); if (!card) { throw new Meteor.Error('card-not-found', 'Card not found'); } @@ -158,7 +158,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const swimlane = Swimlanes.findOne(swimlaneId); + const swimlane = await Swimlanes.findOneAsync(swimlaneId); if (!swimlane) { throw new Meteor.Error('swimlane-not-found', 'Swimlane not found'); } @@ -181,7 +181,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const list = Lists.findOne(listId); + const list = await Lists.findOneAsync(listId); if (!list) { throw new Meteor.Error('list-not-found', 'List not found'); } @@ -204,7 +204,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const card = Cards.findOne(cardId); + const card = await Cards.findOneAsync(cardId); if (!card) { throw new Meteor.Error('card-not-found', 'Card not found'); } @@ -227,7 +227,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const swimlane = Swimlanes.findOne(swimlaneId); + const swimlane = await Swimlanes.findOneAsync(swimlaneId); if (!swimlane) { throw new Meteor.Error('swimlane-not-found', 'Swimlane not found'); } @@ -250,7 +250,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const list = Lists.findOne(listId); + const list = await Lists.findOneAsync(listId); if (!list) { throw new Meteor.Error('list-not-found', 'List not found'); } @@ -273,7 +273,7 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'You must be logged in.'); } - const card = Cards.findOne(cardId); + const card = await Cards.findOneAsync(cardId); if (!card) { throw new Meteor.Error('card-not-found', 'Card not found'); } @@ -305,7 +305,7 @@ Meteor.methods({ boardId: boardId, }, { sort: { createdAt: -1 } - }).fetch(); + }).fetchAsync(); }, /** @@ -333,6 +333,6 @@ Meteor.methods({ entityType: entityType, }, { sort: { createdAt: -1 } - }).fetch(); + }).fetchAsync(); }, }); diff --git a/server/publications/boards.js b/server/publications/boards.js index a202bf67d..0eaa42db0 100644 --- a/server/publications/boards.js +++ b/server/publications/boards.js @@ -22,7 +22,7 @@ publishComposite('boards', function() { return await ReactiveCache.getBoards( { archived: false, - _id: { $in: Boards.userBoardIds(userId, false) }, + _id: { $in: await Boards.userBoardIds(userId, false) }, }, { sort: { sort: 1 /* boards default sorting */ }, @@ -82,7 +82,7 @@ Meteor.publish('boardsReport', async function() { const boards = await ReactiveCache.getBoards( { - _id: { $in: Boards.userBoardIds(userId, null) }, + _id: { $in: await Boards.userBoardIds(userId, null) }, }, { fields: { @@ -142,7 +142,7 @@ Meteor.publish('archivedBoards', async function() { const ret = await ReactiveCache.getBoards( { - _id: { $in: Boards.userBoardIds(userId, true)}, + _id: { $in: await Boards.userBoardIds(userId, true)}, archived: true, members: { $elemMatch: { diff --git a/server/publications/cards.js b/server/publications/cards.js index ccf8d9fef..59ee2ee01 100644 --- a/server/publications/cards.js +++ b/server/publications/cards.js @@ -387,13 +387,13 @@ async function buildSelector(queryParams) { if (archived !== null) { if (archived) { selector.boardId = { - $in: Boards.userBoardIds(userId, null, boardsSelector), + $in: await Boards.userBoardIds(userId, null, boardsSelector), }; selector.$and.push({ $or: [ { boardId: { - $in: Boards.userBoardIds(userId, archived, boardsSelector), + $in: await Boards.userBoardIds(userId, archived, boardsSelector), }, }, { swimlaneId: { $in: Swimlanes.userArchivedSwimlaneIds(userId) } }, @@ -403,14 +403,14 @@ async function buildSelector(queryParams) { }); } else { selector.boardId = { - $in: Boards.userBoardIds(userId, false, boardsSelector), + $in: await Boards.userBoardIds(userId, false, boardsSelector), }; selector.swimlaneId = { $nin: Swimlanes.archivedSwimlaneIds() }; selector.listId = { $nin: Lists.archivedListIds() }; selector.archived = false; } } else { - const userBoardIds = Boards.userBoardIds(userId, null, boardsSelector); + const userBoardIds = await Boards.userBoardIds(userId, null, boardsSelector); if (process.env.DEBUG === 'true') { console.log('buildSelector - userBoardIds:', userBoardIds); } @@ -424,8 +424,8 @@ async function buildSelector(queryParams) { if (queryParams.hasOperator(OPERATOR_BOARD)) { const queryBoards = []; - queryParams.getPredicates(OPERATOR_BOARD).forEach(query => { - const boards = Boards.userSearch(userId, { + for (const query of queryParams.getPredicates(OPERATOR_BOARD)) { + const boards = await Boards.userSearch(userId, { title: new RegExp(escapeForRegex(query), 'i'), }); if (boards.length) { @@ -435,7 +435,7 @@ async function buildSelector(queryParams) { } else { errors.addNotFound(OPERATOR_BOARD, query); } - }); + } selector.boardId.$in = queryBoards; } @@ -550,17 +550,13 @@ async function buildSelector(queryParams) { if (queryParams.hasOperator(OPERATOR_LABEL)) { const queryLabels = []; - queryParams.getPredicates(OPERATOR_LABEL).forEach(label => { - let boards = Boards.userBoards(userId, null, { + for (const label of queryParams.getPredicates(OPERATOR_LABEL)) { + let boards = await Boards.userBoards(userId, null, { labels: { $elemMatch: { color: label.toLowerCase() } }, }); if (boards.length) { boards.forEach(board => { - // eslint-disable-next-line no-console - // console.log('board:', board); - // eslint-disable-next-line no-console - // console.log('board.labels:', board.labels); board.labels .filter(boardLabel => { return boardLabel.color === label.toLowerCase(); @@ -570,12 +566,8 @@ async function buildSelector(queryParams) { }); }); } else { - // eslint-disable-next-line no-console - // console.log('label:', label); const reLabel = new RegExp(escapeForRegex(label), 'i'); - // eslint-disable-next-line no-console - // console.log('reLabel:', reLabel); - boards = Boards.userBoards(userId, null, { + boards = await Boards.userBoards(userId, null, { labels: { $elemMatch: { name: reLabel } }, }); @@ -596,7 +588,7 @@ async function buildSelector(queryParams) { errors.addNotFound(OPERATOR_LABEL, label); } } - }); + } if (queryLabels.length) { // eslint-disable-next-line no-console // console.log('queryLabels:', queryLabels); diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 3d5317c3a..47af33fbb 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -340,13 +340,14 @@ RulesHelper = { sort: 0, }); const itemsArray = action.checklistItems.split(','); - const checkList = await ReactiveCache.getChecklist(checkListId); + const existingItems = await ReactiveCache.getChecklistItems({ checklistId: checkListId }); + const sortBase = existingItems.length; for (let i = 0; i < itemsArray.length; i++) { ChecklistItems.insert({ title: itemsArray[i], checklistId: checkListId, cardId: card._id, - sort: checkList.itemCount(), + sort: sortBase + i, }); } }