From 317a02084109b14ad260a2fc27f8bfcf5a4efef7 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 27 Apr 2020 09:35:05 +0200 Subject: [PATCH] chore(xo-server/decorateWith): use fn wrappers as method decorator --- packages/xo-server/src/_decorateWith.js | 14 ++++++++++++++ packages/xo-server/src/_pDebounceWithKey.js | 5 ----- packages/xo-server/src/xapi/mixins/patching.js | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 packages/xo-server/src/_decorateWith.js diff --git a/packages/xo-server/src/_decorateWith.js b/packages/xo-server/src/_decorateWith.js new file mode 100644 index 000000000..8e45b93c3 --- /dev/null +++ b/packages/xo-server/src/_decorateWith.js @@ -0,0 +1,14 @@ +// Creates a decorator from a function wrapper. +// +// For instance, allows using Lodash's functions as decorators: +// +// ```js +// @decorateWith(lodash.debounce, 150) +// myMethod() { +// // body +// } +// ``` +export const decorateWith = (fn, ...args) => (target, name, descriptor) => ({ + ...descriptor, + value: fn(descriptor.value, ...args), +}) diff --git a/packages/xo-server/src/_pDebounceWithKey.js b/packages/xo-server/src/_pDebounceWithKey.js index a0a10b50a..ae7afc45f 100644 --- a/packages/xo-server/src/_pDebounceWithKey.js +++ b/packages/xo-server/src/_pDebounceWithKey.js @@ -52,8 +52,3 @@ export const debounceWithKey = (fn, delay, keyFn = defaultKeyFn) => { return promise } } - -debounceWithKey.decorate = (...params) => (target, name, descriptor) => ({ - ...descriptor, - value: debounceWithKey(descriptor.value, ...params), -}) diff --git a/packages/xo-server/src/xapi/mixins/patching.js b/packages/xo-server/src/xapi/mixins/patching.js index 5d1fff556..7a52c6f69 100644 --- a/packages/xo-server/src/xapi/mixins/patching.js +++ b/packages/xo-server/src/xapi/mixins/patching.js @@ -5,6 +5,7 @@ import { filter, find, pickBy, some } from 'lodash' import ensureArray from '../../_ensureArray' import { debounceWithKey } from '../../_pDebounceWithKey' +import { decorateWith } from '../../_decorateWith' import { forEach, mapFilter, mapToArray, parseXml } from '../../utils' import { extractOpaqueRef, useUpdateSystem } from '../utils' @@ -55,7 +56,7 @@ const listMissingPatches = debounceWithKey( export default { // raw { uuid: patch } map translated from updates.xensource.com/XenServer/updates.xml // FIXME: should be static - @debounceWithKey.decorate(24 * 60 * 60 * 1000, function() { + @decorateWith(debounceWithKey, 24 * 60 * 60 * 1000, function() { return this }) async _getXenUpdates() {