use-memo-map 0.1.1-main.f09cf49 → 0.2.0-main.08721dd
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/{lib/commonjs/useMemoMap.d.ts → dist/use-memo-map.d.mts} +3 -2
- package/{lib/esmodules/useMemoMap.d.ts → dist/use-memo-map.d.ts} +3 -2
- package/dist/use-memo-map.js +79 -0
- package/dist/use-memo-map.js.map +1 -0
- package/dist/use-memo-map.mjs +52 -0
- package/dist/use-memo-map.mjs.map +1 -0
- package/package.json +24 -45
- package/lib/commonjs/index.d.ts +0 -2
- package/lib/commonjs/index.js +0 -15
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/private/usePrevious.d.ts +0 -1
- package/lib/commonjs/private/usePrevious.js +0 -16
- package/lib/commonjs/private/usePrevious.js.map +0 -1
- package/lib/commonjs/useMemoMap.js +0 -64
- package/lib/commonjs/useMemoMap.js.map +0 -1
- package/lib/esmodules/index.d.ts +0 -2
- package/lib/esmodules/index.js +0 -3
- package/lib/esmodules/index.js.map +0 -1
- package/lib/esmodules/private/usePrevious.d.ts +0 -1
- package/lib/esmodules/private/usePrevious.js +0 -9
- package/lib/esmodules/private/usePrevious.js.map +0 -1
- package/lib/esmodules/useMemoMap.js +0 -56
- package/lib/esmodules/useMemoMap.js.map +0 -1
|
@@ -11,5 +11,6 @@ type UseMemoMapOptions<T> = {
|
|
|
11
11
|
*
|
|
12
12
|
* When the mapping function change, all memoized values will be invalidated.
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
declare function useMemoMap<T = unknown, R = unknown>(mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R, { itemEquality }?: UseMemoMapOptions<T>): (array: readonly T[]) => readonly R[];
|
|
15
|
+
|
|
16
|
+
export { useMemoMap };
|
|
@@ -11,5 +11,6 @@ type UseMemoMapOptions<T> = {
|
|
|
11
11
|
*
|
|
12
12
|
* When the mapping function change, all memoized values will be invalidated.
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
declare function useMemoMap<T = unknown, R = unknown>(mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R, { itemEquality }?: UseMemoMapOptions<T>): (array: readonly T[]) => readonly R[];
|
|
15
|
+
|
|
16
|
+
export { useMemoMap };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
useMemoMap: () => useMemoMap
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(src_exports);
|
|
26
|
+
|
|
27
|
+
// src/useMemoMap.ts
|
|
28
|
+
var import_react2 = require("react");
|
|
29
|
+
var import_use_ref_from = require("use-ref-from");
|
|
30
|
+
|
|
31
|
+
// src/private/usePrevious.ts
|
|
32
|
+
var import_react = require("react");
|
|
33
|
+
function usePrevious(value, initialValue) {
|
|
34
|
+
const ref = (0, import_react.useRef)(initialValue);
|
|
35
|
+
(0, import_react.useEffect)(() => {
|
|
36
|
+
ref.current = value;
|
|
37
|
+
});
|
|
38
|
+
return ref.current;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/useMemoMap.ts
|
|
42
|
+
function useMemoMap(mapper, { itemEquality = Object.is } = {}) {
|
|
43
|
+
const itemEqualityRef = (0, import_use_ref_from.useRefFrom)(itemEquality);
|
|
44
|
+
const lastCallsRef = (0, import_react2.useRef)([]);
|
|
45
|
+
const mapperRef = (0, import_use_ref_from.useRefFrom)(mapper);
|
|
46
|
+
const thisCalls = [];
|
|
47
|
+
if (usePrevious(mapper) !== mapper) {
|
|
48
|
+
lastCallsRef.current = [];
|
|
49
|
+
}
|
|
50
|
+
(0, import_react2.useEffect)(() => {
|
|
51
|
+
lastCallsRef.current = Object.freeze(thisCalls);
|
|
52
|
+
});
|
|
53
|
+
const thisCallsRef = (0, import_use_ref_from.useRefFrom)(thisCalls);
|
|
54
|
+
return (0, import_react2.useCallback)(
|
|
55
|
+
(array) => {
|
|
56
|
+
const { current: itemEquality2 } = itemEqualityRef;
|
|
57
|
+
const { current: mapper2 } = mapperRef;
|
|
58
|
+
const { current: thisCalls2 } = thisCallsRef;
|
|
59
|
+
return Object.freeze(
|
|
60
|
+
array.map((item) => {
|
|
61
|
+
const thisCall = thisCalls2.find((entry) => itemEquality2.call(array, item, entry[0]));
|
|
62
|
+
if (thisCall) {
|
|
63
|
+
return thisCall[1];
|
|
64
|
+
}
|
|
65
|
+
const lastCall = lastCallsRef.current.find((entry) => itemEquality2.call(array, item, entry[0]));
|
|
66
|
+
const result = lastCall ? lastCall[1] : mapper2.call(array, item, -1, array);
|
|
67
|
+
thisCalls2.push([item, result]);
|
|
68
|
+
return result;
|
|
69
|
+
})
|
|
70
|
+
);
|
|
71
|
+
},
|
|
72
|
+
[itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
useMemoMap
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=use-memo-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/useMemoMap.ts","../src/private/usePrevious.ts"],"sourcesContent":["import useMemoMap from './useMemoMap';\n\nexport { useMemoMap };\n","import { useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport usePrevious from './private/usePrevious';\n\ntype UseMemoMapOptions<T> = {\n itemEquality?: (this: readonly T[], x: T, y: T) => boolean;\n};\n\n/**\n * Creates a memoized mapping function.\n *\n * Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.\n * All calls to the mapping function will be memoized.\n *\n * The memoized arguments and return values will survive next render.\n *\n * When the mapping function change, all memoized values will be invalidated.\n */\nexport default function useMemoMap<T = unknown, R = unknown>(\n mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R,\n { itemEquality = Object.is }: UseMemoMapOptions<T> = {}\n): (array: readonly T[]) => readonly R[] {\n const itemEqualityRef = useRefFrom(itemEquality);\n const lastCallsRef = useRef<readonly [T, R][]>([]);\n const mapperRef = useRefFrom(mapper);\n const thisCalls: [T, R][] = [];\n\n if (usePrevious(mapper) !== mapper) {\n lastCallsRef.current = [];\n }\n\n useEffect(() => {\n lastCallsRef.current = Object.freeze(thisCalls);\n });\n\n const thisCallsRef = useRefFrom(thisCalls);\n\n return useCallback<(array: readonly T[]) => readonly R[]>(\n (array: readonly T[]) => {\n const { current: itemEquality } = itemEqualityRef;\n const { current: mapper } = mapperRef;\n const { current: thisCalls } = thisCallsRef;\n\n return <readonly R[]>Object.freeze(\n array.map<R>(item => {\n const thisCall = thisCalls.find(entry => itemEquality.call(array, item, entry[0]));\n\n // If this call has memoized in the current render loop, use the memoized return value.\n if (thisCall) {\n return thisCall[1];\n }\n\n const lastCall = lastCallsRef.current.find(entry => itemEquality.call(array, item, entry[0]));\n const result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);\n\n thisCalls.push([item, result]);\n\n return result;\n })\n );\n },\n [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]\n );\n}\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T, initialValue?: T): T | undefined {\n const ref = useRef<T | undefined>(initialValue);\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA+C;AAC/C,0BAA2B;;;ACD3B,mBAAkC;AAEnB,SAAR,YAAgC,OAAU,cAAiC;AAChF,QAAM,UAAM,qBAAsB,YAAY;AAE9C,8BAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AAED,SAAO,IAAI;AACb;;;ADSe,SAAR,WACL,QACA,EAAE,eAAe,OAAO,GAAG,IAA0B,CAAC,GACf;AACvC,QAAM,sBAAkB,gCAAW,YAAY;AAC/C,QAAM,mBAAe,sBAA0B,CAAC,CAAC;AACjD,QAAM,gBAAY,gCAAW,MAAM;AACnC,QAAM,YAAsB,CAAC;AAE7B,MAAI,YAAY,MAAM,MAAM,QAAQ;AAClC,iBAAa,UAAU,CAAC;AAAA,EAC1B;AAEA,+BAAU,MAAM;AACd,iBAAa,UAAU,OAAO,OAAO,SAAS;AAAA,EAChD,CAAC;AAED,QAAM,mBAAe,gCAAW,SAAS;AAEzC,aAAO;AAAA,IACL,CAAC,UAAwB;AACvB,YAAM,EAAE,SAASC,cAAa,IAAI;AAClC,YAAM,EAAE,SAASC,QAAO,IAAI;AAC5B,YAAM,EAAE,SAASC,WAAU,IAAI;AAE/B,aAAqB,OAAO;AAAA,QAC1B,MAAM,IAAO,UAAQ;AACnB,gBAAM,WAAWA,WAAU,KAAK,WAASF,cAAa,KAAK,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAGjF,cAAI,UAAU;AACZ,mBAAO,SAAS,CAAC;AAAA,UACnB;AAEA,gBAAM,WAAW,aAAa,QAAQ,KAAK,WAASA,cAAa,KAAK,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAC5F,gBAAM,SAAS,WAAW,SAAS,CAAC,IAAIC,QAAO,KAAK,OAAO,MAAM,IAAI,KAAK;AAE1E,UAAAC,WAAU,KAAK,CAAC,MAAM,MAAM,CAAC;AAE7B,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,cAAc,WAAW,YAAY;AAAA,EACzD;AACF;","names":["import_react","itemEquality","mapper","thisCalls"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/useMemoMap.ts
|
|
2
|
+
import { useCallback, useEffect as useEffect2, useRef as useRef2 } from "react";
|
|
3
|
+
import { useRefFrom } from "use-ref-from";
|
|
4
|
+
|
|
5
|
+
// src/private/usePrevious.ts
|
|
6
|
+
import { useEffect, useRef } from "react";
|
|
7
|
+
function usePrevious(value, initialValue) {
|
|
8
|
+
const ref = useRef(initialValue);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
ref.current = value;
|
|
11
|
+
});
|
|
12
|
+
return ref.current;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/useMemoMap.ts
|
|
16
|
+
function useMemoMap(mapper, { itemEquality = Object.is } = {}) {
|
|
17
|
+
const itemEqualityRef = useRefFrom(itemEquality);
|
|
18
|
+
const lastCallsRef = useRef2([]);
|
|
19
|
+
const mapperRef = useRefFrom(mapper);
|
|
20
|
+
const thisCalls = [];
|
|
21
|
+
if (usePrevious(mapper) !== mapper) {
|
|
22
|
+
lastCallsRef.current = [];
|
|
23
|
+
}
|
|
24
|
+
useEffect2(() => {
|
|
25
|
+
lastCallsRef.current = Object.freeze(thisCalls);
|
|
26
|
+
});
|
|
27
|
+
const thisCallsRef = useRefFrom(thisCalls);
|
|
28
|
+
return useCallback(
|
|
29
|
+
(array) => {
|
|
30
|
+
const { current: itemEquality2 } = itemEqualityRef;
|
|
31
|
+
const { current: mapper2 } = mapperRef;
|
|
32
|
+
const { current: thisCalls2 } = thisCallsRef;
|
|
33
|
+
return Object.freeze(
|
|
34
|
+
array.map((item) => {
|
|
35
|
+
const thisCall = thisCalls2.find((entry) => itemEquality2.call(array, item, entry[0]));
|
|
36
|
+
if (thisCall) {
|
|
37
|
+
return thisCall[1];
|
|
38
|
+
}
|
|
39
|
+
const lastCall = lastCallsRef.current.find((entry) => itemEquality2.call(array, item, entry[0]));
|
|
40
|
+
const result = lastCall ? lastCall[1] : mapper2.call(array, item, -1, array);
|
|
41
|
+
thisCalls2.push([item, result]);
|
|
42
|
+
return result;
|
|
43
|
+
})
|
|
44
|
+
);
|
|
45
|
+
},
|
|
46
|
+
[itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
useMemoMap
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=use-memo-map.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useMemoMap.ts","../src/private/usePrevious.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport usePrevious from './private/usePrevious';\n\ntype UseMemoMapOptions<T> = {\n itemEquality?: (this: readonly T[], x: T, y: T) => boolean;\n};\n\n/**\n * Creates a memoized mapping function.\n *\n * Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.\n * All calls to the mapping function will be memoized.\n *\n * The memoized arguments and return values will survive next render.\n *\n * When the mapping function change, all memoized values will be invalidated.\n */\nexport default function useMemoMap<T = unknown, R = unknown>(\n mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R,\n { itemEquality = Object.is }: UseMemoMapOptions<T> = {}\n): (array: readonly T[]) => readonly R[] {\n const itemEqualityRef = useRefFrom(itemEquality);\n const lastCallsRef = useRef<readonly [T, R][]>([]);\n const mapperRef = useRefFrom(mapper);\n const thisCalls: [T, R][] = [];\n\n if (usePrevious(mapper) !== mapper) {\n lastCallsRef.current = [];\n }\n\n useEffect(() => {\n lastCallsRef.current = Object.freeze(thisCalls);\n });\n\n const thisCallsRef = useRefFrom(thisCalls);\n\n return useCallback<(array: readonly T[]) => readonly R[]>(\n (array: readonly T[]) => {\n const { current: itemEquality } = itemEqualityRef;\n const { current: mapper } = mapperRef;\n const { current: thisCalls } = thisCallsRef;\n\n return <readonly R[]>Object.freeze(\n array.map<R>(item => {\n const thisCall = thisCalls.find(entry => itemEquality.call(array, item, entry[0]));\n\n // If this call has memoized in the current render loop, use the memoized return value.\n if (thisCall) {\n return thisCall[1];\n }\n\n const lastCall = lastCallsRef.current.find(entry => itemEquality.call(array, item, entry[0]));\n const result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);\n\n thisCalls.push([item, result]);\n\n return result;\n })\n );\n },\n [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]\n );\n}\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T, initialValue?: T): T | undefined {\n const ref = useRef<T | undefined>(initialValue);\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n"],"mappings":";AAAA,SAAS,aAAa,aAAAA,YAAW,UAAAC,eAAc;AAC/C,SAAS,kBAAkB;;;ACD3B,SAAS,WAAW,cAAc;AAEnB,SAAR,YAAgC,OAAU,cAAiC;AAChF,QAAM,MAAM,OAAsB,YAAY;AAE9C,YAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AAED,SAAO,IAAI;AACb;;;ADSe,SAAR,WACL,QACA,EAAE,eAAe,OAAO,GAAG,IAA0B,CAAC,GACf;AACvC,QAAM,kBAAkB,WAAW,YAAY;AAC/C,QAAM,eAAeC,QAA0B,CAAC,CAAC;AACjD,QAAM,YAAY,WAAW,MAAM;AACnC,QAAM,YAAsB,CAAC;AAE7B,MAAI,YAAY,MAAM,MAAM,QAAQ;AAClC,iBAAa,UAAU,CAAC;AAAA,EAC1B;AAEA,EAAAC,WAAU,MAAM;AACd,iBAAa,UAAU,OAAO,OAAO,SAAS;AAAA,EAChD,CAAC;AAED,QAAM,eAAe,WAAW,SAAS;AAEzC,SAAO;AAAA,IACL,CAAC,UAAwB;AACvB,YAAM,EAAE,SAASC,cAAa,IAAI;AAClC,YAAM,EAAE,SAASC,QAAO,IAAI;AAC5B,YAAM,EAAE,SAASC,WAAU,IAAI;AAE/B,aAAqB,OAAO;AAAA,QAC1B,MAAM,IAAO,UAAQ;AACnB,gBAAM,WAAWA,WAAU,KAAK,WAASF,cAAa,KAAK,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAGjF,cAAI,UAAU;AACZ,mBAAO,SAAS,CAAC;AAAA,UACnB;AAEA,gBAAM,WAAW,aAAa,QAAQ,KAAK,WAASA,cAAa,KAAK,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAC5F,gBAAM,SAAS,WAAW,SAAS,CAAC,IAAIC,QAAO,KAAK,OAAO,MAAM,IAAI,KAAK;AAE1E,UAAAC,WAAU,KAAK,CAAC,MAAM,MAAM,CAAC;AAE7B,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,cAAc,WAAW,YAAY;AAAA,EACzD;AACF;","names":["useEffect","useRef","useRef","useEffect","itemEquality","mapper","thisCalls"]}
|
package/package.json
CHANGED
|
@@ -1,48 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "use-memo-map",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-main.08721dd",
|
|
4
4
|
"description": "Memoizes calls to array map function similar to React.useMemo. Memoized results will survive next render.",
|
|
5
5
|
"files": [
|
|
6
|
-
"./
|
|
6
|
+
"./dist/"
|
|
7
7
|
],
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"import": {
|
|
11
|
-
"types": "./
|
|
12
|
-
"default": "./
|
|
11
|
+
"types": "./dist/use-memo-map.d.mts",
|
|
12
|
+
"default": "./dist/use-memo-map.mjs"
|
|
13
13
|
},
|
|
14
14
|
"require": {
|
|
15
|
-
"types": "./
|
|
16
|
-
"default": "./
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
"./useMemoMap": {
|
|
20
|
-
"import": {
|
|
21
|
-
"types": "./lib/esmodules/useMemoMap.d.ts",
|
|
22
|
-
"default": "./lib/esmodules/useMemoMap.js"
|
|
23
|
-
},
|
|
24
|
-
"require": {
|
|
25
|
-
"types": "./lib/commonjs/useMemoMap.d.ts",
|
|
26
|
-
"default": "./lib/commonjs/useMemoMap.js"
|
|
15
|
+
"types": "./dist/use-memo-map.d.ts",
|
|
16
|
+
"default": "./dist/use-memo-map.js"
|
|
27
17
|
}
|
|
28
18
|
}
|
|
29
19
|
},
|
|
30
|
-
"main": "./
|
|
31
|
-
"typings": "./
|
|
20
|
+
"main": "./dist/use-memo-map.js",
|
|
21
|
+
"typings": "./dist/use-memo-map.d.ts",
|
|
32
22
|
"scripts": {
|
|
33
|
-
"build": "
|
|
34
|
-
"
|
|
35
|
-
"build:babel:esmodules": "babel src --config-file ./babel.esmodules.config.json --extensions .ts,.tsx --out-dir ./lib/esmodules/",
|
|
36
|
-
"build:typescript:commonjs": "tsc --project ./src/tsconfig.declaration.commonjs.json",
|
|
37
|
-
"build:typescript:esmodules": "tsc --project ./src/tsconfig.declaration.esmodules.json",
|
|
38
|
-
"bump": "npm run bump:prod && npm run bump:dev && npm run bump:auditfix && npm run bump:babel",
|
|
23
|
+
"build": "tsup",
|
|
24
|
+
"bump": "npm run bump:prod && npm run bump:dev && npm run bump:auditfix",
|
|
39
25
|
"bump:auditfix": "npm audit fix || exit 0",
|
|
40
|
-
"bump:
|
|
41
|
-
"bump:
|
|
42
|
-
"bump:babel:esmodules": "cat babel.esmodules.config.json | jq --arg CORE_JS_VERSION `[ -f node_modules/@babel/runtime-corejs3/package.json ] && cat node_modules/@babel/runtime-corejs3/package.json | jq -r .version || cat ../../node_modules/@babel/runtime-corejs3/package.json | jq -r .version` '(.plugins[] | select(.[0] == \"@babel/plugin-transform-runtime\"))[1].version = $CORE_JS_VERSION' | prettier --parser json > babel.esmodules.config.json.tmp && mv babel.esmodules.config.json.tmp babel.esmodules.config.json",
|
|
43
|
-
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.localPeerDependencies // {}) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | has($K) | not)) | map(.key + \"@latest\") | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
|
|
44
|
-
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.localPeerDependencies // {}) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | has($K) | not)) | map(.key + \"@latest\") | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
|
|
45
|
-
"postscaffold": "npm run bump:babel",
|
|
26
|
+
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localPeerDependencies // {}) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | has($K) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
|
|
27
|
+
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localPeerDependencies // {}) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | has($K) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
|
|
46
28
|
"precommit": "npm run precommit:eslint && npm run precommit:typescript:production && npm run precommit:typescript:test",
|
|
47
29
|
"precommit:eslint": "eslint ./src/",
|
|
48
30
|
"precommit:typescript:production": "tsc --noEmit --project ./src/tsconfig.precommit.production.json",
|
|
@@ -93,30 +75,27 @@
|
|
|
93
75
|
}
|
|
94
76
|
},
|
|
95
77
|
"devDependencies": {
|
|
96
|
-
"@babel/
|
|
97
|
-
"@babel/
|
|
98
|
-
"@babel/
|
|
99
|
-
"@
|
|
100
|
-
"@
|
|
101
|
-
"@
|
|
102
|
-
"@testing-library/react": "^14.2.2",
|
|
103
|
-
"@tsconfig/recommended": "^1.0.4",
|
|
104
|
-
"@tsconfig/strictest": "^2.0.4",
|
|
78
|
+
"@babel/preset-env": "^7.24.6",
|
|
79
|
+
"@babel/preset-react": "^7.24.6",
|
|
80
|
+
"@babel/preset-typescript": "^7.24.6",
|
|
81
|
+
"@testing-library/react": "^15.0.7",
|
|
82
|
+
"@tsconfig/recommended": "^1.0.6",
|
|
83
|
+
"@tsconfig/strictest": "^2.0.5",
|
|
105
84
|
"@types/jest": "^29.5.12",
|
|
106
|
-
"@types/react": "^18.
|
|
85
|
+
"@types/react": "^18.3.3",
|
|
107
86
|
"escape-string-regexp": "^5.0.0",
|
|
108
87
|
"jest": "^29.7.0",
|
|
109
88
|
"jest-environment-jsdom": "^29.7.0",
|
|
110
|
-
"react": "^18.
|
|
111
|
-
"react-dom": "^18.
|
|
112
|
-
"
|
|
89
|
+
"react": "^18.3.1",
|
|
90
|
+
"react-dom": "^18.3.1",
|
|
91
|
+
"tsup": "^8.0.2",
|
|
92
|
+
"typescript": "^5.4.5"
|
|
113
93
|
},
|
|
114
94
|
"peerDependencies": {
|
|
115
95
|
"react": ">=16.8.0"
|
|
116
96
|
},
|
|
117
97
|
"dependencies": {
|
|
118
|
-
"
|
|
119
|
-
"use-memo-map": "^0.1.1-main.f09cf49",
|
|
98
|
+
"use-memo-map": "^0.2.0-main.08721dd",
|
|
120
99
|
"use-ref-from": "^0.1.0"
|
|
121
100
|
}
|
|
122
101
|
}
|
package/lib/commonjs/index.d.ts
DELETED
package/lib/commonjs/index.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
5
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
_Object$defineProperty(exports, "useMemoMap", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function get() {
|
|
11
|
-
return _useMemoMap.default;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
var _useMemoMap = _interopRequireDefault(require("./useMemoMap"));
|
|
15
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_useMemoMap","_interopRequireDefault","require"],"sources":["../../src/index.ts"],"sourcesContent":["import useMemoMap from './useMemoMap';\n\nexport { useMemoMap };\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function usePrevious<T>(value: T, initialValue?: T): T | undefined;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = usePrevious;
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
function usePrevious(value, initialValue) {
|
|
10
|
-
var ref = (0, _react.useRef)(initialValue);
|
|
11
|
-
(0, _react.useEffect)(function () {
|
|
12
|
-
ref.current = value;
|
|
13
|
-
});
|
|
14
|
-
return ref.current;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=usePrevious.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePrevious.js","names":["_react","require","usePrevious","value","initialValue","ref","useRef","useEffect","current"],"sources":["../../../src/private/usePrevious.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T, initialValue?: T): T | undefined {\n const ref = useRef<T | undefined>(initialValue);\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEe,SAASC,WAAWA,CAAIC,KAAQ,EAAEC,YAAgB,EAAiB;EAChF,IAAMC,GAAG,GAAG,IAAAC,aAAM,EAAgBF,YAAY,CAAC;EAE/C,IAAAG,gBAAS,EAAC,YAAM;IACdF,GAAG,CAACG,OAAO,GAAGL,KAAK;EACrB,CAAC,CAAC;EAEF,OAAOE,GAAG,CAACG,OAAO;AACpB","ignoreList":[]}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
5
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = useMemoMap;
|
|
9
|
-
var _is = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/is"));
|
|
10
|
-
var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
|
|
11
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
12
|
-
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
|
13
|
-
var _react = require("react");
|
|
14
|
-
var _useRefFrom = require("use-ref-from");
|
|
15
|
-
var _usePrevious = _interopRequireDefault(require("./private/usePrevious"));
|
|
16
|
-
/**
|
|
17
|
-
* Creates a memoized mapping function.
|
|
18
|
-
*
|
|
19
|
-
* Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.
|
|
20
|
-
* All calls to the mapping function will be memoized.
|
|
21
|
-
*
|
|
22
|
-
* The memoized arguments and return values will survive next render.
|
|
23
|
-
*
|
|
24
|
-
* When the mapping function change, all memoized values will be invalidated.
|
|
25
|
-
*/
|
|
26
|
-
function useMemoMap(mapper) {
|
|
27
|
-
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
28
|
-
_ref$itemEquality = _ref.itemEquality,
|
|
29
|
-
itemEquality = _ref$itemEquality === void 0 ? _is.default : _ref$itemEquality;
|
|
30
|
-
var itemEqualityRef = (0, _useRefFrom.useRefFrom)(itemEquality);
|
|
31
|
-
var lastCallsRef = (0, _react.useRef)([]);
|
|
32
|
-
var mapperRef = (0, _useRefFrom.useRefFrom)(mapper);
|
|
33
|
-
var thisCalls = [];
|
|
34
|
-
if ((0, _usePrevious.default)(mapper) !== mapper) {
|
|
35
|
-
lastCallsRef.current = [];
|
|
36
|
-
}
|
|
37
|
-
(0, _react.useEffect)(function () {
|
|
38
|
-
lastCallsRef.current = (0, _freeze.default)(thisCalls);
|
|
39
|
-
});
|
|
40
|
-
var thisCallsRef = (0, _useRefFrom.useRefFrom)(thisCalls);
|
|
41
|
-
return (0, _react.useCallback)(function (array) {
|
|
42
|
-
var itemEquality = itemEqualityRef.current;
|
|
43
|
-
var mapper = mapperRef.current;
|
|
44
|
-
var thisCalls = thisCallsRef.current;
|
|
45
|
-
return (0, _freeze.default)((0, _map.default)(array).call(array, function (item) {
|
|
46
|
-
var _context;
|
|
47
|
-
var thisCall = (0, _find.default)(thisCalls).call(thisCalls, function (entry) {
|
|
48
|
-
return itemEquality.call(array, item, entry[0]);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// If this call has memoized in the current render loop, use the memoized return value.
|
|
52
|
-
if (thisCall) {
|
|
53
|
-
return thisCall[1];
|
|
54
|
-
}
|
|
55
|
-
var lastCall = (0, _find.default)(_context = lastCallsRef.current).call(_context, function (entry) {
|
|
56
|
-
return itemEquality.call(array, item, entry[0]);
|
|
57
|
-
});
|
|
58
|
-
var result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);
|
|
59
|
-
thisCalls.push([item, result]);
|
|
60
|
-
return result;
|
|
61
|
-
}));
|
|
62
|
-
}, [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]);
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=useMemoMap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMemoMap.js","names":["_react","require","_useRefFrom","_usePrevious","_interopRequireDefault","useMemoMap","mapper","_ref","arguments","length","undefined","_ref$itemEquality","itemEquality","_is","default","itemEqualityRef","useRefFrom","lastCallsRef","useRef","mapperRef","thisCalls","usePrevious","current","useEffect","_freeze","thisCallsRef","useCallback","array","_map","call","item","_context","thisCall","_find","entry","lastCall","result","push"],"sources":["../../src/useMemoMap.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport usePrevious from './private/usePrevious';\n\ntype UseMemoMapOptions<T> = {\n itemEquality?: (this: readonly T[], x: T, y: T) => boolean;\n};\n\n/**\n * Creates a memoized mapping function.\n *\n * Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.\n * All calls to the mapping function will be memoized.\n *\n * The memoized arguments and return values will survive next render.\n *\n * When the mapping function change, all memoized values will be invalidated.\n */\nexport default function useMemoMap<T = unknown, R = unknown>(\n mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R,\n { itemEquality = Object.is }: UseMemoMapOptions<T> = {}\n): (array: readonly T[]) => readonly R[] {\n const itemEqualityRef = useRefFrom(itemEquality);\n const lastCallsRef = useRef<readonly [T, R][]>([]);\n const mapperRef = useRefFrom(mapper);\n const thisCalls: [T, R][] = [];\n\n if (usePrevious(mapper) !== mapper) {\n lastCallsRef.current = [];\n }\n\n useEffect(() => {\n lastCallsRef.current = Object.freeze(thisCalls);\n });\n\n const thisCallsRef = useRefFrom(thisCalls);\n\n return useCallback<(array: readonly T[]) => readonly R[]>(\n (array: readonly T[]) => {\n const { current: itemEquality } = itemEqualityRef;\n const { current: mapper } = mapperRef;\n const { current: thisCalls } = thisCallsRef;\n\n return <readonly R[]>Object.freeze(\n array.map<R>(item => {\n const thisCall = thisCalls.find(entry => itemEquality.call(array, item, entry[0]));\n\n // If this call has memoized in the current render loop, use the memoized return value.\n if (thisCall) {\n return thisCall[1];\n }\n\n const lastCall = lastCallsRef.current.find(entry => itemEquality.call(array, item, entry[0]));\n const result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);\n\n thisCalls.push([item, result]);\n\n return result;\n })\n );\n },\n [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]\n );\n}\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASI,UAAUA,CAChCC,MAA0E,EAEnC;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MADc,CAAC,CAAC;IAAAG,iBAAA,GAAAJ,IAAA,CAArDK,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAAE,GAAA,CAAAC,OAAA,GAAAH,iBAAA;EAEd,IAAMI,eAAe,GAAG,IAAAC,sBAAU,EAACJ,YAAY,CAAC;EAChD,IAAMK,YAAY,GAAG,IAAAC,aAAM,EAAoB,EAAE,CAAC;EAClD,IAAMC,SAAS,GAAG,IAAAH,sBAAU,EAACV,MAAM,CAAC;EACpC,IAAMc,SAAmB,GAAG,EAAE;EAE9B,IAAI,IAAAC,oBAAW,EAACf,MAAM,CAAC,KAAKA,MAAM,EAAE;IAClCW,YAAY,CAACK,OAAO,GAAG,EAAE;EAC3B;EAEA,IAAAC,gBAAS,EAAC,YAAM;IACdN,YAAY,CAACK,OAAO,GAAG,IAAAE,OAAA,CAAAV,OAAA,EAAcM,SAAS,CAAC;EACjD,CAAC,CAAC;EAEF,IAAMK,YAAY,GAAG,IAAAT,sBAAU,EAACI,SAAS,CAAC;EAE1C,OAAO,IAAAM,kBAAW,EAChB,UAACC,KAAmB,EAAK;IACvB,IAAiBf,YAAY,GAAKG,eAAe,CAAzCO,OAAO;IACf,IAAiBhB,MAAM,GAAKa,SAAS,CAA7BG,OAAO;IACf,IAAiBF,SAAS,GAAKK,YAAY,CAAnCH,OAAO;IAEf,OAAqB,IAAAE,OAAA,CAAAV,OAAA,EACnB,IAAAc,IAAA,CAAAd,OAAA,EAAAa,KAAK,EAAAE,IAAA,CAALF,KAAK,EAAQ,UAAAG,IAAI,EAAI;MAAA,IAAAC,QAAA;MACnB,IAAMC,QAAQ,GAAG,IAAAC,KAAA,CAAAnB,OAAA,EAAAM,SAAS,EAAAS,IAAA,CAATT,SAAS,EAAM,UAAAc,KAAK;QAAA,OAAItB,YAAY,CAACiB,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAEI,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;;MAElF;MACA,IAAIF,QAAQ,EAAE;QACZ,OAAOA,QAAQ,CAAC,CAAC,CAAC;MACpB;MAEA,IAAMG,QAAQ,GAAG,IAAAF,KAAA,CAAAnB,OAAA,EAAAiB,QAAA,GAAAd,YAAY,CAACK,OAAO,EAAAO,IAAA,CAAAE,QAAA,EAAM,UAAAG,KAAK;QAAA,OAAItB,YAAY,CAACiB,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAEI,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;MAC7F,IAAME,MAAM,GAAGD,QAAQ,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAG7B,MAAM,CAACuB,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAE,CAAC,CAAC,EAAEH,KAAK,CAAC;MAE3EP,SAAS,CAACiB,IAAI,CAAC,CAACP,IAAI,EAAEM,MAAM,CAAC,CAAC;MAE9B,OAAOA,MAAM;IACf,CAAC,CACH,CAAC;EACH,CAAC,EACD,CAACrB,eAAe,EAAEE,YAAY,EAAEE,SAAS,EAAEM,YAAY,CACzD,CAAC;AACH","ignoreList":[]}
|
package/lib/esmodules/index.d.ts
DELETED
package/lib/esmodules/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useMemoMap"],"sources":["../../src/index.ts"],"sourcesContent":["import useMemoMap from './useMemoMap';\n\nexport { useMemoMap };\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,cAAc;AAErC,SAASA,UAAU","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function usePrevious<T>(value: T, initialValue?: T): T | undefined;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePrevious.js","names":["useEffect","useRef","usePrevious","value","initialValue","ref","current"],"sources":["../../../src/private/usePrevious.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T, initialValue?: T): T | undefined {\n const ref = useRef<T | undefined>(initialValue);\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEzC,eAAe,SAASC,WAAWA,CAAIC,KAAQ,EAAEC,YAAgB,EAAiB;EAChF,IAAMC,GAAG,GAAGJ,MAAM,CAAgBG,YAAY,CAAC;EAE/CJ,SAAS,CAAC,YAAM;IACdK,GAAG,CAACC,OAAO,GAAGH,KAAK;EACrB,CAAC,CAAC;EAEF,OAAOE,GAAG,CAACC,OAAO;AACpB","ignoreList":[]}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import _Object$is from "@babel/runtime-corejs3/core-js-stable/object/is";
|
|
2
|
-
import _Object$freeze from "@babel/runtime-corejs3/core-js-stable/object/freeze";
|
|
3
|
-
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
4
|
-
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
|
5
|
-
import { useCallback, useEffect, useRef } from 'react';
|
|
6
|
-
import { useRefFrom } from 'use-ref-from';
|
|
7
|
-
import usePrevious from './private/usePrevious';
|
|
8
|
-
/**
|
|
9
|
-
* Creates a memoized mapping function.
|
|
10
|
-
*
|
|
11
|
-
* Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.
|
|
12
|
-
* All calls to the mapping function will be memoized.
|
|
13
|
-
*
|
|
14
|
-
* The memoized arguments and return values will survive next render.
|
|
15
|
-
*
|
|
16
|
-
* When the mapping function change, all memoized values will be invalidated.
|
|
17
|
-
*/
|
|
18
|
-
export default function useMemoMap(mapper) {
|
|
19
|
-
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
20
|
-
_ref$itemEquality = _ref.itemEquality,
|
|
21
|
-
itemEquality = _ref$itemEquality === void 0 ? _Object$is : _ref$itemEquality;
|
|
22
|
-
var itemEqualityRef = useRefFrom(itemEquality);
|
|
23
|
-
var lastCallsRef = useRef([]);
|
|
24
|
-
var mapperRef = useRefFrom(mapper);
|
|
25
|
-
var thisCalls = [];
|
|
26
|
-
if (usePrevious(mapper) !== mapper) {
|
|
27
|
-
lastCallsRef.current = [];
|
|
28
|
-
}
|
|
29
|
-
useEffect(function () {
|
|
30
|
-
lastCallsRef.current = _Object$freeze(thisCalls);
|
|
31
|
-
});
|
|
32
|
-
var thisCallsRef = useRefFrom(thisCalls);
|
|
33
|
-
return useCallback(function (array) {
|
|
34
|
-
var itemEquality = itemEqualityRef.current;
|
|
35
|
-
var mapper = mapperRef.current;
|
|
36
|
-
var thisCalls = thisCallsRef.current;
|
|
37
|
-
return _Object$freeze(_mapInstanceProperty(array).call(array, function (item) {
|
|
38
|
-
var _context;
|
|
39
|
-
var thisCall = _findInstanceProperty(thisCalls).call(thisCalls, function (entry) {
|
|
40
|
-
return itemEquality.call(array, item, entry[0]);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// If this call has memoized in the current render loop, use the memoized return value.
|
|
44
|
-
if (thisCall) {
|
|
45
|
-
return thisCall[1];
|
|
46
|
-
}
|
|
47
|
-
var lastCall = _findInstanceProperty(_context = lastCallsRef.current).call(_context, function (entry) {
|
|
48
|
-
return itemEquality.call(array, item, entry[0]);
|
|
49
|
-
});
|
|
50
|
-
var result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);
|
|
51
|
-
thisCalls.push([item, result]);
|
|
52
|
-
return result;
|
|
53
|
-
}));
|
|
54
|
-
}, [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]);
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=useMemoMap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMemoMap.js","names":["useCallback","useEffect","useRef","useRefFrom","usePrevious","useMemoMap","mapper","_ref","arguments","length","undefined","_ref$itemEquality","itemEquality","_Object$is","itemEqualityRef","lastCallsRef","mapperRef","thisCalls","current","_Object$freeze","thisCallsRef","array","_mapInstanceProperty","call","item","_context","thisCall","_findInstanceProperty","entry","lastCall","result","push"],"sources":["../../src/useMemoMap.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useRefFrom } from 'use-ref-from';\n\nimport usePrevious from './private/usePrevious';\n\ntype UseMemoMapOptions<T> = {\n itemEquality?: (this: readonly T[], x: T, y: T) => boolean;\n};\n\n/**\n * Creates a memoized mapping function.\n *\n * Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.\n * All calls to the mapping function will be memoized.\n *\n * The memoized arguments and return values will survive next render.\n *\n * When the mapping function change, all memoized values will be invalidated.\n */\nexport default function useMemoMap<T = unknown, R = unknown>(\n mapper: (this: readonly T[], item: T, index: -1, array: readonly T[]) => R,\n { itemEquality = Object.is }: UseMemoMapOptions<T> = {}\n): (array: readonly T[]) => readonly R[] {\n const itemEqualityRef = useRefFrom(itemEquality);\n const lastCallsRef = useRef<readonly [T, R][]>([]);\n const mapperRef = useRefFrom(mapper);\n const thisCalls: [T, R][] = [];\n\n if (usePrevious(mapper) !== mapper) {\n lastCallsRef.current = [];\n }\n\n useEffect(() => {\n lastCallsRef.current = Object.freeze(thisCalls);\n });\n\n const thisCallsRef = useRefFrom(thisCalls);\n\n return useCallback<(array: readonly T[]) => readonly R[]>(\n (array: readonly T[]) => {\n const { current: itemEquality } = itemEqualityRef;\n const { current: mapper } = mapperRef;\n const { current: thisCalls } = thisCallsRef;\n\n return <readonly R[]>Object.freeze(\n array.map<R>(item => {\n const thisCall = thisCalls.find(entry => itemEquality.call(array, item, entry[0]));\n\n // If this call has memoized in the current render loop, use the memoized return value.\n if (thisCall) {\n return thisCall[1];\n }\n\n const lastCall = lastCallsRef.current.find(entry => itemEquality.call(array, item, entry[0]));\n const result = lastCall ? lastCall[1] : mapper.call(array, item, -1, array);\n\n thisCalls.push([item, result]);\n\n return result;\n })\n );\n },\n [itemEqualityRef, lastCallsRef, mapperRef, thisCallsRef]\n );\n}\n"],"mappings":";;;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtD,SAASC,UAAU,QAAQ,cAAc;AAEzC,OAAOC,WAAW,MAAM,uBAAuB;AAM/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,UAAUA,CAChCC,MAA0E,EAEnC;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MADc,CAAC,CAAC;IAAAG,iBAAA,GAAAJ,IAAA,CAArDK,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAAE,UAAA,GAAAF,iBAAA;EAEd,IAAMG,eAAe,GAAGX,UAAU,CAACS,YAAY,CAAC;EAChD,IAAMG,YAAY,GAAGb,MAAM,CAAoB,EAAE,CAAC;EAClD,IAAMc,SAAS,GAAGb,UAAU,CAACG,MAAM,CAAC;EACpC,IAAMW,SAAmB,GAAG,EAAE;EAE9B,IAAIb,WAAW,CAACE,MAAM,CAAC,KAAKA,MAAM,EAAE;IAClCS,YAAY,CAACG,OAAO,GAAG,EAAE;EAC3B;EAEAjB,SAAS,CAAC,YAAM;IACdc,YAAY,CAACG,OAAO,GAAGC,cAAA,CAAcF,SAAS,CAAC;EACjD,CAAC,CAAC;EAEF,IAAMG,YAAY,GAAGjB,UAAU,CAACc,SAAS,CAAC;EAE1C,OAAOjB,WAAW,CAChB,UAACqB,KAAmB,EAAK;IACvB,IAAiBT,YAAY,GAAKE,eAAe,CAAzCI,OAAO;IACf,IAAiBZ,MAAM,GAAKU,SAAS,CAA7BE,OAAO;IACf,IAAiBD,SAAS,GAAKG,YAAY,CAAnCF,OAAO;IAEf,OAAqBC,cAAA,CACnBG,oBAAA,CAAAD,KAAK,EAAAE,IAAA,CAALF,KAAK,EAAQ,UAAAG,IAAI,EAAI;MAAA,IAAAC,QAAA;MACnB,IAAMC,QAAQ,GAAGC,qBAAA,CAAAV,SAAS,EAAAM,IAAA,CAATN,SAAS,EAAM,UAAAW,KAAK;QAAA,OAAIhB,YAAY,CAACW,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAEI,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;;MAElF;MACA,IAAIF,QAAQ,EAAE;QACZ,OAAOA,QAAQ,CAAC,CAAC,CAAC;MACpB;MAEA,IAAMG,QAAQ,GAAGF,qBAAA,CAAAF,QAAA,GAAAV,YAAY,CAACG,OAAO,EAAAK,IAAA,CAAAE,QAAA,EAAM,UAAAG,KAAK;QAAA,OAAIhB,YAAY,CAACW,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAEI,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;MAC7F,IAAME,MAAM,GAAGD,QAAQ,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGvB,MAAM,CAACiB,IAAI,CAACF,KAAK,EAAEG,IAAI,EAAE,CAAC,CAAC,EAAEH,KAAK,CAAC;MAE3EJ,SAAS,CAACc,IAAI,CAAC,CAACP,IAAI,EAAEM,MAAM,CAAC,CAAC;MAE9B,OAAOA,MAAM;IACf,CAAC,CACH,CAAC;EACH,CAAC,EACD,CAAChB,eAAe,EAAEC,YAAY,EAAEC,SAAS,EAAEI,YAAY,CACzD,CAAC;AACH","ignoreList":[]}
|