-
Notifications
You must be signed in to change notification settings - Fork 10.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Move rocketchat settings to specific package * WIP: Move models from rocketchat-lib to a specific package (server) * Move function from rocketchat:lib to rocketchat:utils to use it in rocketchat:models * Move client models from rocketchat:lib to rocketchat:models * Fix lint * Move rocketchat.info from lib to utils * Remove directly dependency between lib and migrations * Move statistics Model to rocketchat:models * Create rocketchat:metrics to be able to depacking rocketchat callbacks * Move callbacks to specific package * Remove unused dependency * Move rocketchat-notifications to a specific package * Move rocketchat-promises to a specific package * Merge branch 'develop' into globals/move-rocketchat-callbacks
- Loading branch information
1 parent
05fa219
commit 8c3f991
Showing
8 changed files
with
113 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -207,3 +207,4 @@ rocketchat:models | |
rocketchat:metrics | ||
rocketchat:callbacks | ||
rocketchat:notifications | ||
rocketchat:promises |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,84 +1,3 @@ | ||
import { Meteor } from 'meteor/meteor'; | ||
import { Random } from 'meteor/random'; | ||
import _ from 'underscore'; | ||
import { promises } from 'meteor/rocketchat:promises'; | ||
|
||
/* | ||
* Callback hooks provide an easy way to add extra steps to common operations. | ||
* @namespace RocketChat.promises | ||
*/ | ||
|
||
RocketChat.promises = {}; | ||
|
||
|
||
/* | ||
* Callback priorities | ||
*/ | ||
|
||
RocketChat.promises.priority = { | ||
HIGH: -1000, | ||
MEDIUM: 0, | ||
LOW: 1000, | ||
}; | ||
|
||
const getHook = (hookName) => RocketChat.promises[hookName] || []; | ||
|
||
/* | ||
* Add a callback function to a hook | ||
* @param {String} hook - The name of the hook | ||
* @param {Function} callback - The callback function | ||
*/ | ||
|
||
RocketChat.promises.add = function(hook, callback, p = RocketChat.promises.priority.MEDIUM, id) { | ||
callback.priority = _.isNumber(p) ? p : RocketChat.promises.priority.MEDIUM; | ||
callback.id = id || Random.id(); | ||
RocketChat.promises[hook] = getHook(hook); | ||
if (RocketChat.promises[hook].find((cb) => cb.id === callback.id)) { | ||
return; | ||
} | ||
RocketChat.promises[hook].push(callback); | ||
RocketChat.promises[hook] = _.sortBy(RocketChat.promises[hook], (callback) => callback.priority || RocketChat.promises.priority.MEDIUM); | ||
}; | ||
|
||
|
||
/* | ||
* Remove a callback from a hook | ||
* @param {string} hook - The name of the hook | ||
* @param {string} id - The callback's id | ||
*/ | ||
|
||
RocketChat.promises.remove = function(hook, id) { | ||
RocketChat.promises[hook] = getHook(hook).filter((callback) => callback.id !== id); | ||
}; | ||
|
||
|
||
/* | ||
* Successively run all of a hook's callbacks on an item | ||
* @param {String} hook - The name of the hook | ||
* @param {Object} item - The post, comment, modifier, etc. on which to run the callbacks | ||
* @param {Object} [constant] - An optional constant that will be passed along to each callback | ||
* @returns {Object} Returns the item after it's been through all the callbacks for this hook | ||
*/ | ||
|
||
RocketChat.promises.run = function(hook, item, constant) { | ||
const callbacks = RocketChat.promises[hook]; | ||
if (callbacks == null || callbacks.length === 0) { | ||
return Promise.resolve(item); | ||
} | ||
return callbacks.reduce((previousPromise, callback) => previousPromise.then((result) => callback(result, constant)), Promise.resolve(item)); | ||
}; | ||
|
||
|
||
/* | ||
* Successively run all of a hook's callbacks on an item, in async mode (only works on server) | ||
* @param {String} hook - The name of the hook | ||
* @param {Object} item - The post, comment, modifier, etc. on which to run the callbacks | ||
* @param {Object} [constant] - An optional constant that will be passed along to each callback | ||
*/ | ||
|
||
RocketChat.promises.runAsync = function(hook, item, constant) { | ||
const callbacks = RocketChat.promises[hook]; | ||
if (!Meteor.isServer || callbacks == null || callbacks.length === 0) { | ||
return item; | ||
} | ||
Meteor.defer(() => callbacks.forEach((callback) => callback(item, constant))); | ||
}; | ||
RocketChat.promises = promises; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { promises } from '../lib/promises'; | ||
|
||
export { | ||
promises, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
import { Meteor } from 'meteor/meteor'; | ||
import { Random } from 'meteor/random'; | ||
import _ from 'underscore'; | ||
|
||
/* | ||
* Callback hooks provide an easy way to add extra steps to common operations. | ||
* @namespace RocketChat.promises | ||
*/ | ||
|
||
export const promises = {}; | ||
|
||
|
||
/* | ||
* Callback priorities | ||
*/ | ||
|
||
promises.priority = { | ||
HIGH: -1000, | ||
MEDIUM: 0, | ||
LOW: 1000, | ||
}; | ||
|
||
const getHook = (hookName) => promises[hookName] || []; | ||
|
||
/* | ||
* Add a callback function to a hook | ||
* @param {String} hook - The name of the hook | ||
* @param {Function} callback - The callback function | ||
*/ | ||
|
||
promises.add = function(hook, callback, p = promises.priority.MEDIUM, id) { | ||
callback.priority = _.isNumber(p) ? p : promises.priority.MEDIUM; | ||
callback.id = id || Random.id(); | ||
promises[hook] = getHook(hook); | ||
if (promises[hook].find((cb) => cb.id === callback.id)) { | ||
return; | ||
} | ||
promises[hook].push(callback); | ||
promises[hook] = _.sortBy(promises[hook], (callback) => callback.priority || promises.priority.MEDIUM); | ||
}; | ||
|
||
|
||
/* | ||
* Remove a callback from a hook | ||
* @param {string} hook - The name of the hook | ||
* @param {string} id - The callback's id | ||
*/ | ||
|
||
promises.remove = function(hook, id) { | ||
promises[hook] = getHook(hook).filter((callback) => callback.id !== id); | ||
}; | ||
|
||
|
||
/* | ||
* Successively run all of a hook's callbacks on an item | ||
* @param {String} hook - The name of the hook | ||
* @param {Object} item - The post, comment, modifier, etc. on which to run the callbacks | ||
* @param {Object} [constant] - An optional constant that will be passed along to each callback | ||
* @returns {Object} Returns the item after it's been through all the callbacks for this hook | ||
*/ | ||
|
||
promises.run = function(hook, item, constant) { | ||
const callbacks = promises[hook]; | ||
if (callbacks == null || callbacks.length === 0) { | ||
return Promise.resolve(item); | ||
} | ||
return callbacks.reduce((previousPromise, callback) => previousPromise.then((result) => callback(result, constant)), Promise.resolve(item)); | ||
}; | ||
|
||
|
||
/* | ||
* Successively run all of a hook's callbacks on an item, in async mode (only works on server) | ||
* @param {String} hook - The name of the hook | ||
* @param {Object} item - The post, comment, modifier, etc. on which to run the callbacks | ||
* @param {Object} [constant] - An optional constant that will be passed along to each callback | ||
*/ | ||
|
||
promises.runAsync = function(hook, item, constant) { | ||
const callbacks = promises[hook]; | ||
if (!Meteor.isServer || callbacks == null || callbacks.length === 0) { | ||
return item; | ||
} | ||
Meteor.defer(() => callbacks.forEach((callback) => callback(item, constant))); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
Package.describe({ | ||
name: 'rocketchat:promises', | ||
version: '0.0.1', | ||
summary: 'Rocketchat Promises', | ||
git: '', | ||
}); | ||
|
||
Package.onUse(function(api) { | ||
api.use([ | ||
'ecmascript', | ||
]); | ||
api.mainModule('client/index.js', 'client'); | ||
api.mainModule('server/index.js', 'server'); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { promises } from '../lib/promises'; | ||
|
||
export { | ||
promises, | ||
}; |