mirror of
https://github.com/BreizhHardware/memoizee.git
synced 2026-01-18 16:37:21 +01:00
Seclude resolver utilities
This commit is contained in:
@@ -1,53 +1,32 @@
|
||||
'use strict';
|
||||
|
||||
var toArray = require('es5-ext/array/to-array')
|
||||
, customError = require('es5-ext/error/custom')
|
||||
, defineLength = require('es5-ext/function/_define-length')
|
||||
, callable = require('es5-ext/object/valid-callable')
|
||||
, d = require('d')
|
||||
, ee = require('event-emitter').methods
|
||||
var customError = require('es5-ext/error/custom')
|
||||
, defineLength = require('es5-ext/function/_define-length')
|
||||
, d = require('d')
|
||||
, ee = require('event-emitter').methods
|
||||
, resolveResolve = require('./resolve-resolve')
|
||||
, resolveNormalize = require('./resolve-normalize')
|
||||
|
||||
, slice = Array.prototype.slice
|
||||
, apply = Function.prototype.apply, call = Function.prototype.call
|
||||
, create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty
|
||||
, defineProperties = Object.defineProperties
|
||||
, on = ee.on, emit = ee.emit, resolveArgs;
|
||||
|
||||
resolveArgs = function (args) {
|
||||
return this.map(function (r, i) {
|
||||
return r ? r(args[i]) : args[i];
|
||||
}).concat(slice.call(args, this.length));
|
||||
};
|
||||
, on = ee.on, emit = ee.emit;
|
||||
|
||||
module.exports = function (original, length, options) {
|
||||
var cache = create(null), conf, memLength, get, set, del, clear, extDel
|
||||
, getListeners, setListeners, deleteListeners, memoized, resolve, resolvers;
|
||||
var cache = create(null), conf, memLength, get, set, del, clear, extDel, normalizer
|
||||
, getListeners, setListeners, deleteListeners, memoized, resolve;
|
||||
if (length !== false) memLength = length;
|
||||
else if (isNaN(original.length)) memLength = 1;
|
||||
else memLength = original.length;
|
||||
|
||||
if (options.normalizer) {
|
||||
if (typeof options.normalizer === 'function') {
|
||||
set = get = options.normalizer;
|
||||
} else {
|
||||
get = callable(options.normalizer.get);
|
||||
if (options.normalizer.set !== undefined) {
|
||||
set = callable(options.normalizer.set);
|
||||
del = callable(options.normalizer.delete);
|
||||
clear = callable(options.normalizer.clear);
|
||||
} else {
|
||||
set = get;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.resolvers != null) {
|
||||
resolvers = toArray(options.resolvers);
|
||||
resolvers.forEach(function (r) {
|
||||
if (r != null) callable(r);
|
||||
});
|
||||
resolve = resolveArgs.bind(resolvers);
|
||||
normalizer = resolveNormalize(options.normalizer);
|
||||
get = normalizer.get;
|
||||
set = normalizer.set;
|
||||
del = normalizer.delete;
|
||||
clear = normalizer.clear;
|
||||
}
|
||||
if (options.resolvers != null) resolve = resolveResolve(options.resolvers);
|
||||
|
||||
if (get) {
|
||||
memoized = defineLength(function (arg) {
|
||||
|
||||
18
lib/resolve-normalize.js
Normal file
18
lib/resolve-normalize.js
Normal file
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
var callable = require('es5-ext/object/valid-callable')
|
||||
|
||||
module.exports = function (normalizer) {
|
||||
if (typeof normalizer === 'function') {
|
||||
return { set: normalizer, get: normalizer };
|
||||
}
|
||||
normalizer = { get: callable(normalizer.get) };
|
||||
if (normalizer.set !== undefined) {
|
||||
normalizer.set = callable(normalizer.set);
|
||||
normalizer.delete = callable(normalizer.delete);
|
||||
normalizer.clear = callable(normalizer.clear);
|
||||
return normalizer;
|
||||
}
|
||||
normalizer.set = normalizer.get;
|
||||
return normalizer;
|
||||
};
|
||||
21
lib/resolve-resolve.js
Normal file
21
lib/resolve-resolve.js
Normal file
@@ -0,0 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
var toArray = require('es5-ext/array/to-array')
|
||||
, callable = require('es5-ext/object/valid-callable')
|
||||
|
||||
, slice = Array.prototype.slice
|
||||
, resolveArgs;
|
||||
|
||||
resolveArgs = function (args) {
|
||||
return this.map(function (r, i) {
|
||||
return r ? r(args[i]) : args[i];
|
||||
}).concat(slice.call(args, this.length));
|
||||
};
|
||||
|
||||
module.exports = function (resolvers) {
|
||||
resolvers = toArray(resolvers);
|
||||
resolvers.forEach(function (r) {
|
||||
if (r != null) callable(r);
|
||||
});
|
||||
return resolveArgs.bind(resolvers);
|
||||
};
|
||||
Reference in New Issue
Block a user