hexo-adsense 1.0.21 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +20 -6
- package/lib/index.js +8 -1
- package/lib/source/adblock.css +2 -83
- package/lib/source/adblock.js +1 -31
- package/lib/source/article-ads.css +2 -11
- package/lib/source/article-ads.js +1 -270
- package/lib/source/blogger-redirect.html +1 -14
- package/lib/source/https.js +1 -4
- package/lib/src/article-ads.d.ts +1 -1
- package/lib/src/article-ads.js +6 -6
- package/lib/src/config.d.ts +12 -19
- package/lib/src/config.js +3 -5
- package/lib/src/utils.d.ts +9 -1
- package/lib/src/utils.js +2 -2
- package/package.json +20 -5
- package/packages/hexo-cli-extras/.eslintrc +13 -0
- package/packages/hexo-cli-extras/LICENSE.md +20 -0
- package/packages/hexo-cli-extras/README.md +146 -0
- package/packages/hexo-cli-extras/docs/basic.gif +0 -0
- package/packages/hexo-cli-extras/docs/gui.gif +0 -0
- package/packages/hexo-cli-extras/docs/remove.png +0 -0
- package/packages/hexo-cli-extras/docs/rename.png +0 -0
- package/packages/hexo-cli-extras/index.js +48 -0
- package/packages/hexo-cli-extras/lib/edit.js +209 -0
- package/packages/hexo-cli-extras/lib/env.js +52 -0
- package/packages/hexo-cli-extras/lib/extensions.js +23 -0
- package/packages/hexo-cli-extras/lib/integrate.js +87 -0
- package/packages/hexo-cli-extras/lib/isolate.js +179 -0
- package/packages/hexo-cli-extras/lib/remove.js +145 -0
- package/packages/hexo-cli-extras/lib/rename.js +171 -0
- package/packages/hexo-cli-extras/package.json +34 -0
- package/packages/hexo-extend-injector2/.eslintrc +4 -0
- package/packages/hexo-extend-injector2/.github/workflows/linter.yml +27 -0
- package/packages/hexo-extend-injector2/.github/workflows/tester.yml +24 -0
- package/packages/hexo-extend-injector2/.vscode/settings.json +10 -0
- package/packages/hexo-extend-injector2/LICENSE +165 -0
- package/packages/hexo-extend-injector2/README-ZH.md +189 -0
- package/packages/hexo-extend-injector2/README.md +191 -0
- package/packages/hexo-extend-injector2/USAGE.md +38 -0
- package/packages/hexo-extend-injector2/index.js +13 -0
- package/packages/hexo-extend-injector2/lib/bundle/css-bundle.js +79 -0
- package/packages/hexo-extend-injector2/lib/bundle/css-generator.js +13 -0
- package/packages/hexo-extend-injector2/lib/bundle/handle-data-pre.js +29 -0
- package/packages/hexo-extend-injector2/lib/bundle/js-bundle.js +42 -0
- package/packages/hexo-extend-injector2/lib/bundle/js-generator.js +10 -0
- package/packages/hexo-extend-injector2/lib/default-config.js +52 -0
- package/packages/hexo-extend-injector2/lib/filter.js +24 -0
- package/packages/hexo-extend-injector2/lib/helper/injector.js +6 -0
- package/packages/hexo-extend-injector2/lib/helper/next-inject.js +14 -0
- package/packages/hexo-extend-injector2/lib/injector.js +128 -0
- package/packages/hexo-extend-injector2/lib/load.js +45 -0
- package/packages/hexo-extend-injector2/lib/next-point.js +19 -0
- package/packages/hexo-extend-injector2/lib/next.js +87 -0
- package/packages/hexo-extend-injector2/lib/order.js +9 -0
- package/packages/hexo-extend-injector2/package.json +49 -0
- package/packages/hexo-extend-injector2/renovate.json +6 -0
- package/packages/hexo-extend-injector2/test/.eslintrc +3 -0
- package/packages/hexo-extend-injector2/test/index.js +18 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-css.js +86 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/bundle-js.js +36 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/test.css +3 -0
- package/packages/hexo-extend-injector2/test/lib/bundle/test.js +5 -0
- package/packages/hexo-extend-injector2/test/lib/helper/injector.js +45 -0
- package/packages/hexo-extend-injector2/test/lib/helper/next-inject.js +69 -0
- package/packages/hexo-extend-injector2/test/lib/hexo-compatible.js +250 -0
- package/packages/hexo-extend-injector2/test/lib/hexo-injector.js +37 -0
- package/packages/hexo-extend-injector2/test/lib/injector.js +93 -0
- package/packages/memoize/CHANGELOG.md +82 -0
- package/packages/memoize/CHANGES +124 -0
- package/packages/memoize/LICENSE +15 -0
- package/packages/memoize/README.md +503 -0
- package/packages/memoize/ext/async.js +154 -0
- package/packages/memoize/ext/dispose.js +33 -0
- package/packages/memoize/ext/max-age.js +90 -0
- package/packages/memoize/ext/max.js +27 -0
- package/packages/memoize/ext/promise.js +147 -0
- package/packages/memoize/ext/ref-counter.js +48 -0
- package/packages/memoize/index.js +34 -0
- package/packages/memoize/lib/configure-map.js +182 -0
- package/packages/memoize/lib/methods.js +32 -0
- package/packages/memoize/lib/registered-extensions.js +1 -0
- package/packages/memoize/lib/resolve-length.js +15 -0
- package/packages/memoize/lib/resolve-normalize.js +17 -0
- package/packages/memoize/lib/resolve-resolve.js +21 -0
- package/packages/memoize/lib/weak.js +134 -0
- package/packages/memoize/methods-plain.js +3 -0
- package/packages/memoize/methods.js +3 -0
- package/packages/memoize/normalizers/get-1.js +29 -0
- package/packages/memoize/normalizers/get-fixed.js +71 -0
- package/packages/memoize/normalizers/get-primitive-fixed.js +16 -0
- package/packages/memoize/normalizers/get.js +90 -0
- package/packages/memoize/normalizers/primitive.js +9 -0
- package/packages/memoize/package.json +60 -0
- package/packages/memoize/plain.js +37 -0
- package/packages/memoize/profile.js +107 -0
- package/packages/memoize/repository.md +1 -0
- package/packages/memoize/weak-plain.js +3 -0
- package/packages/memoize/weak.js +3 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/* eslint no-eq-null: 0, eqeqeq: 0, no-unused-vars: 0 */
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
var customError = require("es5-ext/error/custom")
|
|
6
|
+
, defineLength = require("es5-ext/function/_define-length")
|
|
7
|
+
, d = require("d")
|
|
8
|
+
, ee = require("event-emitter").methods
|
|
9
|
+
, resolveResolve = require("./resolve-resolve")
|
|
10
|
+
, resolveNormalize = require("./resolve-normalize");
|
|
11
|
+
|
|
12
|
+
var apply = Function.prototype.apply
|
|
13
|
+
, call = Function.prototype.call
|
|
14
|
+
, create = Object.create
|
|
15
|
+
, defineProperties = Object.defineProperties
|
|
16
|
+
, on = ee.on
|
|
17
|
+
, emit = ee.emit;
|
|
18
|
+
|
|
19
|
+
module.exports = function (original, length, options) {
|
|
20
|
+
var cache = create(null)
|
|
21
|
+
, conf
|
|
22
|
+
, memLength
|
|
23
|
+
, get
|
|
24
|
+
, set
|
|
25
|
+
, del
|
|
26
|
+
, clear
|
|
27
|
+
, extDel
|
|
28
|
+
, extGet
|
|
29
|
+
, extHas
|
|
30
|
+
, normalizer
|
|
31
|
+
, getListeners
|
|
32
|
+
, setListeners
|
|
33
|
+
, deleteListeners
|
|
34
|
+
, memoized
|
|
35
|
+
, resolve;
|
|
36
|
+
if (length !== false) memLength = length;
|
|
37
|
+
else if (isNaN(original.length)) memLength = 1;
|
|
38
|
+
else memLength = original.length;
|
|
39
|
+
|
|
40
|
+
if (options.normalizer) {
|
|
41
|
+
normalizer = resolveNormalize(options.normalizer);
|
|
42
|
+
get = normalizer.get;
|
|
43
|
+
set = normalizer.set;
|
|
44
|
+
del = normalizer.delete;
|
|
45
|
+
clear = normalizer.clear;
|
|
46
|
+
}
|
|
47
|
+
if (options.resolvers != null) resolve = resolveResolve(options.resolvers);
|
|
48
|
+
|
|
49
|
+
if (get) {
|
|
50
|
+
memoized = defineLength(function (arg) {
|
|
51
|
+
var id, result, args = arguments;
|
|
52
|
+
if (resolve) args = resolve(args);
|
|
53
|
+
id = get(args);
|
|
54
|
+
if (id !== null) {
|
|
55
|
+
if (hasOwnProperty.call(cache, id)) {
|
|
56
|
+
if (getListeners) conf.emit("get", id, args, this);
|
|
57
|
+
return cache[id];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (args.length === 1) result = call.call(original, this, args[0]);
|
|
61
|
+
else result = apply.call(original, this, args);
|
|
62
|
+
if (id === null) {
|
|
63
|
+
id = get(args);
|
|
64
|
+
if (id !== null) throw customError("Circular invocation", "CIRCULAR_INVOCATION");
|
|
65
|
+
id = set(args);
|
|
66
|
+
} else if (hasOwnProperty.call(cache, id)) {
|
|
67
|
+
throw customError("Circular invocation", "CIRCULAR_INVOCATION");
|
|
68
|
+
}
|
|
69
|
+
cache[id] = result;
|
|
70
|
+
if (setListeners) conf.emit("set", id, null, result);
|
|
71
|
+
return result;
|
|
72
|
+
}, memLength);
|
|
73
|
+
} else if (length === 0) {
|
|
74
|
+
memoized = function () {
|
|
75
|
+
var result;
|
|
76
|
+
if (hasOwnProperty.call(cache, "data")) {
|
|
77
|
+
if (getListeners) conf.emit("get", "data", arguments, this);
|
|
78
|
+
return cache.data;
|
|
79
|
+
}
|
|
80
|
+
if (arguments.length) result = apply.call(original, this, arguments);
|
|
81
|
+
else result = call.call(original, this);
|
|
82
|
+
if (hasOwnProperty.call(cache, "data")) {
|
|
83
|
+
throw customError("Circular invocation", "CIRCULAR_INVOCATION");
|
|
84
|
+
}
|
|
85
|
+
cache.data = result;
|
|
86
|
+
if (setListeners) conf.emit("set", "data", null, result);
|
|
87
|
+
return result;
|
|
88
|
+
};
|
|
89
|
+
} else {
|
|
90
|
+
memoized = function (arg) {
|
|
91
|
+
var result, args = arguments, id;
|
|
92
|
+
if (resolve) args = resolve(arguments);
|
|
93
|
+
id = String(args[0]);
|
|
94
|
+
if (hasOwnProperty.call(cache, id)) {
|
|
95
|
+
if (getListeners) conf.emit("get", id, args, this);
|
|
96
|
+
return cache[id];
|
|
97
|
+
}
|
|
98
|
+
if (args.length === 1) result = call.call(original, this, args[0]);
|
|
99
|
+
else result = apply.call(original, this, args);
|
|
100
|
+
if (hasOwnProperty.call(cache, id)) {
|
|
101
|
+
throw customError("Circular invocation", "CIRCULAR_INVOCATION");
|
|
102
|
+
}
|
|
103
|
+
cache[id] = result;
|
|
104
|
+
if (setListeners) conf.emit("set", id, null, result);
|
|
105
|
+
return result;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
conf = {
|
|
109
|
+
original: original,
|
|
110
|
+
memoized: memoized,
|
|
111
|
+
profileName: options.profileName,
|
|
112
|
+
get: function (args) {
|
|
113
|
+
if (resolve) args = resolve(args);
|
|
114
|
+
if (get) return get(args);
|
|
115
|
+
return String(args[0]);
|
|
116
|
+
},
|
|
117
|
+
has: function (id) { return hasOwnProperty.call(cache, id); },
|
|
118
|
+
delete: function (id) {
|
|
119
|
+
var result;
|
|
120
|
+
if (!hasOwnProperty.call(cache, id)) return;
|
|
121
|
+
if (del) del(id);
|
|
122
|
+
result = cache[id];
|
|
123
|
+
delete cache[id];
|
|
124
|
+
if (deleteListeners) conf.emit("delete", id, result);
|
|
125
|
+
},
|
|
126
|
+
clear: function () {
|
|
127
|
+
var oldCache = cache;
|
|
128
|
+
if (clear) clear();
|
|
129
|
+
cache = create(null);
|
|
130
|
+
conf.emit("clear", oldCache);
|
|
131
|
+
},
|
|
132
|
+
on: function (type, listener) {
|
|
133
|
+
if (type === "get") getListeners = true;
|
|
134
|
+
else if (type === "set") setListeners = true;
|
|
135
|
+
else if (type === "delete") deleteListeners = true;
|
|
136
|
+
return on.call(this, type, listener);
|
|
137
|
+
},
|
|
138
|
+
emit: emit,
|
|
139
|
+
updateEnv: function () { original = conf.original; }
|
|
140
|
+
};
|
|
141
|
+
if (get) {
|
|
142
|
+
extDel = defineLength(function (arg) {
|
|
143
|
+
var id, args = arguments;
|
|
144
|
+
if (resolve) args = resolve(args);
|
|
145
|
+
id = get(args);
|
|
146
|
+
if (id === null) return;
|
|
147
|
+
conf.delete(id);
|
|
148
|
+
}, memLength);
|
|
149
|
+
} else if (length === 0) {
|
|
150
|
+
extDel = function () { return conf.delete("data"); };
|
|
151
|
+
} else {
|
|
152
|
+
extDel = function (arg) {
|
|
153
|
+
if (resolve) arg = resolve(arguments)[0];
|
|
154
|
+
return conf.delete(arg);
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
extGet = defineLength(function () {
|
|
158
|
+
var id, args = arguments;
|
|
159
|
+
if (length === 0) return cache.data;
|
|
160
|
+
if (resolve) args = resolve(args);
|
|
161
|
+
if (get) id = get(args);
|
|
162
|
+
else id = String(args[0]);
|
|
163
|
+
return cache[id];
|
|
164
|
+
});
|
|
165
|
+
extHas = defineLength(function () {
|
|
166
|
+
var id, args = arguments;
|
|
167
|
+
if (length === 0) return conf.has("data");
|
|
168
|
+
if (resolve) args = resolve(args);
|
|
169
|
+
if (get) id = get(args);
|
|
170
|
+
else id = String(args[0]);
|
|
171
|
+
if (id === null) return false;
|
|
172
|
+
return conf.has(id);
|
|
173
|
+
});
|
|
174
|
+
defineProperties(memoized, {
|
|
175
|
+
__memoized__: d(true),
|
|
176
|
+
delete: d(extDel),
|
|
177
|
+
clear: d(conf.clear),
|
|
178
|
+
_get: d(extGet),
|
|
179
|
+
_has: d(extHas)
|
|
180
|
+
});
|
|
181
|
+
return conf;
|
|
182
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var forEach = require("es5-ext/object/for-each")
|
|
4
|
+
, normalizeOpts = require("es5-ext/object/normalize-options")
|
|
5
|
+
, callable = require("es5-ext/object/valid-callable")
|
|
6
|
+
, lazy = require("d/lazy")
|
|
7
|
+
, resolveLength = require("./resolve-length")
|
|
8
|
+
, extensions = require("./registered-extensions");
|
|
9
|
+
|
|
10
|
+
module.exports = function (memoize) {
|
|
11
|
+
return function (props) {
|
|
12
|
+
forEach(props, function (desc) {
|
|
13
|
+
var fn = callable(desc.value), length;
|
|
14
|
+
desc.value = function (options) {
|
|
15
|
+
if (options.getNormalizer) {
|
|
16
|
+
options = normalizeOpts(options);
|
|
17
|
+
if (length === undefined) {
|
|
18
|
+
length = resolveLength(
|
|
19
|
+
options.length,
|
|
20
|
+
fn.length,
|
|
21
|
+
options.async && extensions.async
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
options.normalizer = options.getNormalizer(length);
|
|
25
|
+
delete options.getNormalizer;
|
|
26
|
+
}
|
|
27
|
+
return memoize(fn.bind(this), options);
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
return lazy(props);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var toPosInt = require("es5-ext/number/to-pos-integer");
|
|
4
|
+
|
|
5
|
+
module.exports = function (optsLength, fnLength, isAsync) {
|
|
6
|
+
var length;
|
|
7
|
+
if (isNaN(optsLength)) {
|
|
8
|
+
length = fnLength;
|
|
9
|
+
if (!(length >= 0)) return 1;
|
|
10
|
+
if (isAsync && length) return length - 1;
|
|
11
|
+
return length;
|
|
12
|
+
}
|
|
13
|
+
if (optsLength === false) return false;
|
|
14
|
+
return toPosInt(optsLength);
|
|
15
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var callable = require("es5-ext/object/valid-callable");
|
|
4
|
+
|
|
5
|
+
module.exports = function (userNormalizer) {
|
|
6
|
+
var normalizer;
|
|
7
|
+
if (typeof userNormalizer === "function") return { set: userNormalizer, get: userNormalizer };
|
|
8
|
+
normalizer = { get: callable(userNormalizer.get) };
|
|
9
|
+
if (userNormalizer.set !== undefined) {
|
|
10
|
+
normalizer.set = callable(userNormalizer.set);
|
|
11
|
+
if (userNormalizer.delete) normalizer.delete = callable(userNormalizer.delete);
|
|
12
|
+
if (userNormalizer.clear) normalizer.clear = callable(userNormalizer.clear);
|
|
13
|
+
return normalizer;
|
|
14
|
+
}
|
|
15
|
+
normalizer.set = normalizer.get;
|
|
16
|
+
return normalizer;
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var toArray = require("es5-ext/array/to-array")
|
|
4
|
+
, isValue = require("es5-ext/object/is-value")
|
|
5
|
+
, callable = require("es5-ext/object/valid-callable");
|
|
6
|
+
|
|
7
|
+
var slice = Array.prototype.slice, resolveArgs;
|
|
8
|
+
|
|
9
|
+
resolveArgs = function (args) {
|
|
10
|
+
return this.map(function (resolve, i) {
|
|
11
|
+
return resolve ? resolve(args[i]) : args[i];
|
|
12
|
+
}).concat(slice.call(args, this.length));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
module.exports = function (resolvers) {
|
|
16
|
+
resolvers = toArray(resolvers);
|
|
17
|
+
resolvers.forEach(function (resolve) {
|
|
18
|
+
if (isValue(resolve)) callable(resolve);
|
|
19
|
+
});
|
|
20
|
+
return resolveArgs.bind(resolvers);
|
|
21
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var customError = require("es5-ext/error/custom")
|
|
4
|
+
, defineLength = require("es5-ext/function/_define-length")
|
|
5
|
+
, partial = require("es5-ext/function/#/partial")
|
|
6
|
+
, copy = require("es5-ext/object/copy")
|
|
7
|
+
, normalizeOpts = require("es5-ext/object/normalize-options")
|
|
8
|
+
, callable = require("es5-ext/object/valid-callable")
|
|
9
|
+
, d = require("d")
|
|
10
|
+
, WeakMap = require("es6-weak-map")
|
|
11
|
+
, resolveLength = require("./resolve-length")
|
|
12
|
+
, extensions = require("./registered-extensions")
|
|
13
|
+
, resolveResolve = require("./resolve-resolve")
|
|
14
|
+
, resolveNormalize = require("./resolve-normalize");
|
|
15
|
+
|
|
16
|
+
var slice = Array.prototype.slice, defineProperties = Object.defineProperties;
|
|
17
|
+
|
|
18
|
+
module.exports = function (memoize) {
|
|
19
|
+
return function (fn/*, options*/) {
|
|
20
|
+
var map, length, options = normalizeOpts(arguments[1]), memoized, resolve, normalizer;
|
|
21
|
+
|
|
22
|
+
callable(fn);
|
|
23
|
+
|
|
24
|
+
// Do not memoize already memoized function
|
|
25
|
+
if (hasOwnProperty.call(fn, "__memoized__") && !options.force) return fn;
|
|
26
|
+
|
|
27
|
+
length = resolveLength(options.length, fn.length, options.async && extensions.async);
|
|
28
|
+
options.length = length ? length - 1 : 0;
|
|
29
|
+
map = new WeakMap();
|
|
30
|
+
|
|
31
|
+
if (options.resolvers) resolve = resolveResolve(options.resolvers);
|
|
32
|
+
if (options.normalizer) normalizer = resolveNormalize(options.normalizer);
|
|
33
|
+
|
|
34
|
+
if (
|
|
35
|
+
length === 1 &&
|
|
36
|
+
!normalizer &&
|
|
37
|
+
!options.async &&
|
|
38
|
+
!options.dispose &&
|
|
39
|
+
!options.maxAge &&
|
|
40
|
+
!options.max &&
|
|
41
|
+
!options.refCounter
|
|
42
|
+
) {
|
|
43
|
+
return defineProperties(
|
|
44
|
+
function (obj) {
|
|
45
|
+
var result, args = arguments;
|
|
46
|
+
if (resolve) args = resolve(args);
|
|
47
|
+
obj = args[0];
|
|
48
|
+
if (map.has(obj)) return map.get(obj);
|
|
49
|
+
result = fn.apply(this, args);
|
|
50
|
+
if (map.has(obj)) {
|
|
51
|
+
throw customError("Circular invocation", "CIRCULAR_INVOCATION");
|
|
52
|
+
}
|
|
53
|
+
map.set(obj, result);
|
|
54
|
+
return result;
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
__memoized__: d(true),
|
|
58
|
+
delete: d(function (obj) {
|
|
59
|
+
if (resolve) obj = resolve(arguments)[0];
|
|
60
|
+
return map.delete(obj);
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
memoized = defineProperties(
|
|
66
|
+
defineLength(function (obj) {
|
|
67
|
+
var memoizer, args = arguments;
|
|
68
|
+
if (resolve) {
|
|
69
|
+
args = resolve(args);
|
|
70
|
+
obj = args[0];
|
|
71
|
+
}
|
|
72
|
+
memoizer = map.get(obj);
|
|
73
|
+
if (!memoizer) {
|
|
74
|
+
if (normalizer) {
|
|
75
|
+
options = copy(options);
|
|
76
|
+
options.normalizer = copy(normalizer);
|
|
77
|
+
options.normalizer.get = partial.call(options.normalizer.get, obj);
|
|
78
|
+
options.normalizer.set = partial.call(options.normalizer.set, obj);
|
|
79
|
+
if (options.normalizer.delete) {
|
|
80
|
+
options.normalizer.delete = partial.call(
|
|
81
|
+
options.normalizer.delete, obj
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
map.set(obj, memoizer = memoize(partial.call(fn, obj), options));
|
|
86
|
+
}
|
|
87
|
+
return memoizer.apply(this, slice.call(args, 1));
|
|
88
|
+
}, length),
|
|
89
|
+
{
|
|
90
|
+
__memoized__: d(true),
|
|
91
|
+
delete: d(
|
|
92
|
+
defineLength(function (obj) {
|
|
93
|
+
var memoizer, args = arguments;
|
|
94
|
+
if (resolve) {
|
|
95
|
+
args = resolve(args);
|
|
96
|
+
obj = args[0];
|
|
97
|
+
}
|
|
98
|
+
memoizer = map.get(obj);
|
|
99
|
+
if (!memoizer) return;
|
|
100
|
+
memoizer.delete.apply(this, slice.call(args, 1));
|
|
101
|
+
}, length)
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
if (!options.refCounter) return memoized;
|
|
106
|
+
defineProperties(memoized, {
|
|
107
|
+
deleteRef: d(
|
|
108
|
+
defineLength(function (obj) {
|
|
109
|
+
var memoizer, args = arguments;
|
|
110
|
+
if (resolve) {
|
|
111
|
+
args = resolve(args);
|
|
112
|
+
obj = args[0];
|
|
113
|
+
}
|
|
114
|
+
memoizer = map.get(obj);
|
|
115
|
+
if (!memoizer) return null;
|
|
116
|
+
return memoizer.deleteRef.apply(this, slice.call(args, 1));
|
|
117
|
+
}, length)
|
|
118
|
+
),
|
|
119
|
+
getRefCount: d(
|
|
120
|
+
defineLength(function (obj) {
|
|
121
|
+
var memoizer, args = arguments;
|
|
122
|
+
if (resolve) {
|
|
123
|
+
args = resolve(args);
|
|
124
|
+
obj = args[0];
|
|
125
|
+
}
|
|
126
|
+
memoizer = map.get(obj);
|
|
127
|
+
if (!memoizer) return 0;
|
|
128
|
+
return memoizer.getRefCount.apply(this, slice.call(args, 1));
|
|
129
|
+
}, length)
|
|
130
|
+
)
|
|
131
|
+
});
|
|
132
|
+
return memoized;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var indexOf = require("es5-ext/array/#/e-index-of");
|
|
4
|
+
|
|
5
|
+
module.exports = function () {
|
|
6
|
+
var lastId = 0, argsMap = [], cache = [];
|
|
7
|
+
return {
|
|
8
|
+
get: function (args) {
|
|
9
|
+
var index = indexOf.call(argsMap, args[0]);
|
|
10
|
+
return index === -1 ? null : cache[index];
|
|
11
|
+
},
|
|
12
|
+
set: function (args) {
|
|
13
|
+
argsMap.push(args[0]);
|
|
14
|
+
cache.push(++lastId);
|
|
15
|
+
return lastId;
|
|
16
|
+
},
|
|
17
|
+
delete: function (id) {
|
|
18
|
+
var index = indexOf.call(cache, id);
|
|
19
|
+
if (index !== -1) {
|
|
20
|
+
argsMap.splice(index, 1);
|
|
21
|
+
cache.splice(index, 1);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
clear: function () {
|
|
25
|
+
argsMap = [];
|
|
26
|
+
cache = [];
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var indexOf = require("es5-ext/array/#/e-index-of")
|
|
4
|
+
, create = Object.create;
|
|
5
|
+
|
|
6
|
+
module.exports = function (length) {
|
|
7
|
+
var lastId = 0, map = [[], []], cache = create(null);
|
|
8
|
+
return {
|
|
9
|
+
get: function (args) {
|
|
10
|
+
var index = 0, set = map, i;
|
|
11
|
+
while (index < length - 1) {
|
|
12
|
+
i = indexOf.call(set[0], args[index]);
|
|
13
|
+
if (i === -1) return null;
|
|
14
|
+
set = set[1][i];
|
|
15
|
+
++index;
|
|
16
|
+
}
|
|
17
|
+
i = indexOf.call(set[0], args[index]);
|
|
18
|
+
if (i === -1) return null;
|
|
19
|
+
return set[1][i] || null;
|
|
20
|
+
},
|
|
21
|
+
set: function (args) {
|
|
22
|
+
var index = 0, set = map, i;
|
|
23
|
+
while (index < length - 1) {
|
|
24
|
+
i = indexOf.call(set[0], args[index]);
|
|
25
|
+
if (i === -1) {
|
|
26
|
+
i = set[0].push(args[index]) - 1;
|
|
27
|
+
set[1].push([[], []]);
|
|
28
|
+
}
|
|
29
|
+
set = set[1][i];
|
|
30
|
+
++index;
|
|
31
|
+
}
|
|
32
|
+
i = indexOf.call(set[0], args[index]);
|
|
33
|
+
if (i === -1) {
|
|
34
|
+
i = set[0].push(args[index]) - 1;
|
|
35
|
+
}
|
|
36
|
+
set[1][i] = ++lastId;
|
|
37
|
+
cache[lastId] = args;
|
|
38
|
+
return lastId;
|
|
39
|
+
},
|
|
40
|
+
delete: function (id) {
|
|
41
|
+
var index = 0, set = map, i, path = [], args = cache[id];
|
|
42
|
+
while (index < length - 1) {
|
|
43
|
+
i = indexOf.call(set[0], args[index]);
|
|
44
|
+
if (i === -1) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
path.push(set, i);
|
|
48
|
+
set = set[1][i];
|
|
49
|
+
++index;
|
|
50
|
+
}
|
|
51
|
+
i = indexOf.call(set[0], args[index]);
|
|
52
|
+
if (i === -1) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
id = set[1][i];
|
|
56
|
+
set[0].splice(i, 1);
|
|
57
|
+
set[1].splice(i, 1);
|
|
58
|
+
while (!set[0].length && path.length) {
|
|
59
|
+
i = path.pop();
|
|
60
|
+
set = path.pop();
|
|
61
|
+
set[0].splice(i, 1);
|
|
62
|
+
set[1].splice(i, 1);
|
|
63
|
+
}
|
|
64
|
+
delete cache[id];
|
|
65
|
+
},
|
|
66
|
+
clear: function () {
|
|
67
|
+
map = [[], []];
|
|
68
|
+
cache = create(null);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
module.exports = function (length) {
|
|
4
|
+
if (!length) {
|
|
5
|
+
return function () {
|
|
6
|
+
return "";
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
return function (args) {
|
|
10
|
+
var id = String(args[0]), i = 0, currentLength = length;
|
|
11
|
+
while (--currentLength) {
|
|
12
|
+
id += "\u0001" + args[++i];
|
|
13
|
+
}
|
|
14
|
+
return id;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* eslint max-statements: 0 */
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
var indexOf = require("es5-ext/array/#/e-index-of");
|
|
6
|
+
|
|
7
|
+
var create = Object.create;
|
|
8
|
+
|
|
9
|
+
module.exports = function () {
|
|
10
|
+
var lastId = 0, map = [], cache = create(null);
|
|
11
|
+
return {
|
|
12
|
+
get: function (args) {
|
|
13
|
+
var index = 0, set = map, i, length = args.length;
|
|
14
|
+
if (length === 0) return set[length] || null;
|
|
15
|
+
if ((set = set[length])) {
|
|
16
|
+
while (index < length - 1) {
|
|
17
|
+
i = indexOf.call(set[0], args[index]);
|
|
18
|
+
if (i === -1) return null;
|
|
19
|
+
set = set[1][i];
|
|
20
|
+
++index;
|
|
21
|
+
}
|
|
22
|
+
i = indexOf.call(set[0], args[index]);
|
|
23
|
+
if (i === -1) return null;
|
|
24
|
+
return set[1][i] || null;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
},
|
|
28
|
+
set: function (args) {
|
|
29
|
+
var index = 0, set = map, i, length = args.length;
|
|
30
|
+
if (length === 0) {
|
|
31
|
+
set[length] = ++lastId;
|
|
32
|
+
} else {
|
|
33
|
+
if (!set[length]) {
|
|
34
|
+
set[length] = [[], []];
|
|
35
|
+
}
|
|
36
|
+
set = set[length];
|
|
37
|
+
while (index < length - 1) {
|
|
38
|
+
i = indexOf.call(set[0], args[index]);
|
|
39
|
+
if (i === -1) {
|
|
40
|
+
i = set[0].push(args[index]) - 1;
|
|
41
|
+
set[1].push([[], []]);
|
|
42
|
+
}
|
|
43
|
+
set = set[1][i];
|
|
44
|
+
++index;
|
|
45
|
+
}
|
|
46
|
+
i = indexOf.call(set[0], args[index]);
|
|
47
|
+
if (i === -1) {
|
|
48
|
+
i = set[0].push(args[index]) - 1;
|
|
49
|
+
}
|
|
50
|
+
set[1][i] = ++lastId;
|
|
51
|
+
}
|
|
52
|
+
cache[lastId] = args;
|
|
53
|
+
return lastId;
|
|
54
|
+
},
|
|
55
|
+
delete: function (id) {
|
|
56
|
+
var index = 0, set = map, i, args = cache[id], length = args.length, path = [];
|
|
57
|
+
if (length === 0) {
|
|
58
|
+
delete set[length];
|
|
59
|
+
} else if ((set = set[length])) {
|
|
60
|
+
while (index < length - 1) {
|
|
61
|
+
i = indexOf.call(set[0], args[index]);
|
|
62
|
+
if (i === -1) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
path.push(set, i);
|
|
66
|
+
set = set[1][i];
|
|
67
|
+
++index;
|
|
68
|
+
}
|
|
69
|
+
i = indexOf.call(set[0], args[index]);
|
|
70
|
+
if (i === -1) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
id = set[1][i];
|
|
74
|
+
set[0].splice(i, 1);
|
|
75
|
+
set[1].splice(i, 1);
|
|
76
|
+
while (!set[0].length && path.length) {
|
|
77
|
+
i = path.pop();
|
|
78
|
+
set = path.pop();
|
|
79
|
+
set[0].splice(i, 1);
|
|
80
|
+
set[1].splice(i, 1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
delete cache[id];
|
|
84
|
+
},
|
|
85
|
+
clear: function () {
|
|
86
|
+
map = [];
|
|
87
|
+
cache = create(null);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memoizee",
|
|
3
|
+
"version": "0.4.15",
|
|
4
|
+
"description": "Memoize/cache function results",
|
|
5
|
+
"author": "Mariusz Nowak <medikoo@medikoo.com> (http://www.medikoo.com/)",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"memoize",
|
|
8
|
+
"memoizer",
|
|
9
|
+
"cache",
|
|
10
|
+
"memoization",
|
|
11
|
+
"memo",
|
|
12
|
+
"memcached",
|
|
13
|
+
"hashing.",
|
|
14
|
+
"storage",
|
|
15
|
+
"caching",
|
|
16
|
+
"memory",
|
|
17
|
+
"gc",
|
|
18
|
+
"weak",
|
|
19
|
+
"garbage",
|
|
20
|
+
"collector",
|
|
21
|
+
"async"
|
|
22
|
+
],
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git://github.com/medikoo/memoizee.git"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"d": "^1.0.1",
|
|
29
|
+
"es5-ext": "^0.10.53",
|
|
30
|
+
"es6-weak-map": "^2.0.3",
|
|
31
|
+
"event-emitter": "^0.3.5",
|
|
32
|
+
"is-promise": "^2.2.2",
|
|
33
|
+
"lru-queue": "^0.1.0",
|
|
34
|
+
"next-tick": "^1.1.0",
|
|
35
|
+
"timers-ext": "^0.1.7"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"bluebird": "^3.7.2",
|
|
39
|
+
"eslint": "^5.16.0",
|
|
40
|
+
"eslint-config-medikoo-es5": "^1.7.3",
|
|
41
|
+
"plain-promise": "^0.1.1",
|
|
42
|
+
"tad": "^2.0.1"
|
|
43
|
+
},
|
|
44
|
+
"eslintConfig": {
|
|
45
|
+
"extends": "medikoo-es5",
|
|
46
|
+
"root": true,
|
|
47
|
+
"globals": {
|
|
48
|
+
"setTimeout": true,
|
|
49
|
+
"clearTimeout": true
|
|
50
|
+
},
|
|
51
|
+
"rules": {
|
|
52
|
+
"max-lines-per-function": "off"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"lint": "eslint --ignore-path=.gitignore .",
|
|
57
|
+
"test": "tad"
|
|
58
|
+
},
|
|
59
|
+
"license": "ISC"
|
|
60
|
+
}
|