use-memo-map 0.0.3-main.eef11c8 → 0.0.4-main.3fa9b81

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.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
5
  _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["import useMemoMap from './useMemoMap';\n\nexport { useMemoMap };\n"],"mappings":";;;;;;;;;;;;;AAAA"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePrevious.js","names":["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;AAEe,SAASA,WAAW,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"}
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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
5
  _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useMemoMap.js","names":["useMemoMap","mapper","itemEquality","itemEqualityRef","useRefFrom","lastCallsRef","useRef","mapperRef","thisCalls","usePrevious","current","useEffect","thisCallsRef","useCallback","array","item","thisCall","entry","call","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;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,UAAU,CAChCC,MAA0E,EAEnC;EAAA,+EADc,CAAC,CAAC;IAAA,yBAArDC,YAAY;IAAZA,YAAY;EAEd,IAAMC,eAAe,GAAG,IAAAC,sBAAU,EAACF,YAAY,CAAC;EAChD,IAAMG,YAAY,GAAG,IAAAC,aAAM,EAAoB,EAAE,CAAC;EAClD,IAAMC,SAAS,GAAG,IAAAH,sBAAU,EAACH,MAAM,CAAC;EACpC,IAAMO,SAAmB,GAAG,EAAE;EAE9B,IAAI,IAAAC,oBAAW,EAACR,MAAM,CAAC,KAAKA,MAAM,EAAE;IAClCI,YAAY,CAACK,OAAO,GAAG,EAAE;EAC3B;EAEA,IAAAC,gBAAS,EAAC,YAAM;IACdN,YAAY,CAACK,OAAO,GAAG,qBAAcF,SAAS,CAAC;EACjD,CAAC,CAAC;EAEF,IAAMI,YAAY,GAAG,IAAAR,sBAAU,EAACI,SAAS,CAAC;EAE1C,OAAO,IAAAK,kBAAW,EAChB,UAACC,KAAmB,EAAK;IACvB,IAAiBZ,YAAY,GAAKC,eAAe,CAAzCO,OAAO;IACf,IAAiBT,MAAM,GAAKM,SAAS,CAA7BG,OAAO;IACf,IAAiBF,SAAS,GAAKI,YAAY,CAAnCF,OAAO;IAEf,OAAqB,qBACnB,kBAAAI,KAAK,OAALA,KAAK,EAAQ,UAAAC,IAAI,EAAI;MAAA;MACnB,IAAMC,QAAQ,GAAG,mBAAAR,SAAS,OAATA,SAAS,EAAM,UAAAS,KAAK;QAAA,OAAIf,YAAY,CAACgB,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;;MAElF;MACA,IAAID,QAAQ,EAAE;QACZ,OAAOA,QAAQ,CAAC,CAAC,CAAC;MACpB;MAEA,IAAMG,QAAQ,GAAG,8BAAAd,YAAY,CAACK,OAAO,iBAAM,UAAAO,KAAK;QAAA,OAAIf,YAAY,CAACgB,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;MAC7F,IAAMG,MAAM,GAAGD,QAAQ,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGlB,MAAM,CAACiB,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAE,CAAC,CAAC,EAAED,KAAK,CAAC;MAE3EN,SAAS,CAACa,IAAI,CAAC,CAACN,IAAI,EAAEK,MAAM,CAAC,CAAC;MAE9B,OAAOA,MAAM;IACf,CAAC,CAAC,CACH;EACH,CAAC,EACD,CAACjB,eAAe,EAAEE,YAAY,EAAEE,SAAS,EAAEK,YAAY,CAAC,CACzD;AACH"}
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"}
@@ -1 +1 @@
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,WAAW,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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMemoMap.js","names":["useCallback","useEffect","useRef","useRefFrom","usePrevious","useMemoMap","mapper","itemEquality","itemEqualityRef","lastCallsRef","mapperRef","thisCalls","current","thisCallsRef","array","item","thisCall","entry","call","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,UAAU,CAChCC,MAA0E,EAEnC;EAAA,+EADc,CAAC,CAAC;IAAA,yBAArDC,YAAY;IAAZA,YAAY;EAEd,IAAMC,eAAe,GAAGL,UAAU,CAACI,YAAY,CAAC;EAChD,IAAME,YAAY,GAAGP,MAAM,CAAoB,EAAE,CAAC;EAClD,IAAMQ,SAAS,GAAGP,UAAU,CAACG,MAAM,CAAC;EACpC,IAAMK,SAAmB,GAAG,EAAE;EAE9B,IAAIP,WAAW,CAACE,MAAM,CAAC,KAAKA,MAAM,EAAE;IAClCG,YAAY,CAACG,OAAO,GAAG,EAAE;EAC3B;EAEAX,SAAS,CAAC,YAAM;IACdQ,YAAY,CAACG,OAAO,GAAG,eAAcD,SAAS,CAAC;EACjD,CAAC,CAAC;EAEF,IAAME,YAAY,GAAGV,UAAU,CAACQ,SAAS,CAAC;EAE1C,OAAOX,WAAW,CAChB,UAACc,KAAmB,EAAK;IACvB,IAAiBP,YAAY,GAAKC,eAAe,CAAzCI,OAAO;IACf,IAAiBN,MAAM,GAAKI,SAAS,CAA7BE,OAAO;IACf,IAAiBD,SAAS,GAAKE,YAAY,CAAnCD,OAAO;IAEf,OAAqB,eACnB,qBAAAE,KAAK,OAALA,KAAK,EAAQ,UAAAC,IAAI,EAAI;MAAA;MACnB,IAAMC,QAAQ,GAAG,sBAAAL,SAAS,OAATA,SAAS,EAAM,UAAAM,KAAK;QAAA,OAAIV,YAAY,CAACW,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;;MAElF;MACA,IAAID,QAAQ,EAAE;QACZ,OAAOA,QAAQ,CAAC,CAAC,CAAC;MACpB;MAEA,IAAMG,QAAQ,GAAG,iCAAAV,YAAY,CAACG,OAAO,iBAAM,UAAAK,KAAK;QAAA,OAAIV,YAAY,CAACW,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;MAC7F,IAAMG,MAAM,GAAGD,QAAQ,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGb,MAAM,CAACY,IAAI,CAACJ,KAAK,EAAEC,IAAI,EAAE,CAAC,CAAC,EAAED,KAAK,CAAC;MAE3EH,SAAS,CAACU,IAAI,CAAC,CAACN,IAAI,EAAEK,MAAM,CAAC,CAAC;MAE9B,OAAOA,MAAM;IACf,CAAC,CAAC,CACH;EACH,CAAC,EACD,CAACZ,eAAe,EAAEC,YAAY,EAAEC,SAAS,EAAEG,YAAY,CAAC,CACzD;AACH"}
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"}
@@ -0,0 +1,2 @@
1
+ import useMemoMap from './useMemoMap';
2
+ export { useMemoMap };
@@ -0,0 +1 @@
1
+ export default function usePrevious<T>(value: T, initialValue?: T): T | undefined;
@@ -0,0 +1,15 @@
1
+ type UseMemoMapOptions<T> = {
2
+ itemEquality?: (this: readonly T[], x: T, y: T) => boolean;
3
+ };
4
+ /**
5
+ * Creates a memoized mapping function.
6
+ *
7
+ * Unlike `React.useMemo`, the mapping function can be called multiple times in a single render loop.
8
+ * All calls to the mapping function will be memoized.
9
+ *
10
+ * The memoized arguments and return values will survive next render.
11
+ *
12
+ * When the mapping function change, all memoized values will be invalidated.
13
+ */
14
+ export default 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
+ export {};
package/package.json CHANGED
@@ -1,30 +1,54 @@
1
1
  {
2
2
  "name": "use-memo-map",
3
- "version": "0.0.3-main.eef11c8",
3
+ "version": "0.0.4-main.3fa9b81",
4
4
  "description": "Memoizes calls to array map function similar to React.useMemo. Memoized results will survive next render.",
5
5
  "files": [
6
- "./lib/*"
6
+ "./lib/"
7
7
  ],
8
8
  "exports": {
9
9
  ".": {
10
- "import": "./lib/esmodules/index.js",
11
- "require": "./lib/commonjs/index.js"
10
+ "import": {
11
+ "types": "./lib/esmodules-types/index.d.ts",
12
+ "default": "./lib/esmodules/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./lib/commonjs-types/index.d.ts",
16
+ "default": "./lib/commonjs/index.js"
17
+ }
12
18
  },
13
19
  "./useMemoMap": {
14
- "import": "./lib/esmodules/useMemoMap.js",
15
- "require": "./lib/commonjs/useMemoMap.js"
20
+ "import": {
21
+ "types": "./lib/esmodules-types/useMemoMap.d.ts",
22
+ "default": "./lib/esmodules/useMemoMap.js"
23
+ },
24
+ "require": {
25
+ "types": "./lib/commonjs-types/useMemoMap.d.ts",
26
+ "default": "./lib/commonjs/useMemoMap.js"
27
+ }
16
28
  }
17
29
  },
18
30
  "main": "./lib/commonjs/index.js",
19
- "typings": "./lib/types/index.d.ts",
31
+ "typings": "./lib/commonjs-types/index.d.ts",
20
32
  "scripts": {
21
- "build": "npm run build:babel && npm run build:typescript",
22
- "build:babel": "npm run build:babel:commonjs && npm run build:babel:esmodules",
33
+ "build": "npm run build:babel:commonjs && npm run build:babel:esmodules && npm run build:typescript:commonjs && npm run build:typescript:esmodules",
23
34
  "build:babel:commonjs": "babel src --config-file ./babel.commonjs.config.json --extensions .ts,.tsx --out-dir ./lib/commonjs/",
24
35
  "build:babel:esmodules": "babel src --config-file ./babel.esmodules.config.json --extensions .ts,.tsx --out-dir ./lib/esmodules/",
25
- "build:typescript": "tsc --project ./src/tsconfig.declaration.json",
26
- "precommit": "eslint ./src/",
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",
39
+ "bump:auditfix": "npm audit fix || exit 0",
40
+ "bump:babel": "npm run bump:babel:commonjs && npm run bump:babel:esmodules",
41
+ "bump:babel:commonjs": "cat babel.commonjs.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.commonjs.config.json.tmp && mv babel.commonjs.config.json.tmp babel.commonjs.config.json",
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",
46
+ "precommit": "npm run precommit:eslint && npm run precommit:typescript:production && npm run precommit:typescript:test",
47
+ "precommit:eslint": "eslint ./src/",
48
+ "precommit:typescript:production": "tsc --noEmit --project ./src/tsconfig.precommit.production.json",
49
+ "precommit:typescript:test": "tsc --noEmit --project ./src/tsconfig.precommit.test.json",
27
50
  "prepack": "cp ../../CHANGELOG.md . && cp ../../LICENSE . && cp ../../README.md .",
51
+ "start": "esbuild --bundle --outfile=./public/main.js --servedir=./public --sourcemap ./scenarios/index.jsx",
28
52
  "test": "jest"
29
53
  },
30
54
  "repository": {
@@ -34,7 +58,8 @@
34
58
  "keywords": [
35
59
  "react",
36
60
  "react-hook",
37
- "react-hooks"
61
+ "react-hooks",
62
+ "use-memo"
38
63
  ],
39
64
  "author": "William Wong (https://github.com/compulim)",
40
65
  "license": "MIT",
@@ -42,25 +67,31 @@
42
67
  "url": "https://github.com/compulim/use-memo-map/issues"
43
68
  },
44
69
  "homepage": "https://github.com/compulim/use-memo-map#readme",
70
+ "pinDependencies": {},
45
71
  "devDependencies": {
46
- "@babel/cli": "^7.20.7",
47
- "@babel/core": "^7.20.7",
48
- "@babel/plugin-transform-runtime": "^7.19.6",
49
- "@babel/preset-env": "^7.20.2",
50
- "@babel/preset-typescript": "^7.18.6",
51
- "@testing-library/react-hooks": "^8.0.1",
52
- "@types/react": "^17.0.52",
53
- "jest": "^29.3.1",
54
- "jest-environment-jsdom": "^29.3.1",
55
- "react": "^17.0.2",
56
- "react-test-renderer": "^17.0.2",
57
- "typescript": "^4.9.4"
72
+ "@babel/cli": "^7.22.9",
73
+ "@babel/core": "^7.22.9",
74
+ "@babel/plugin-transform-runtime": "^7.22.9",
75
+ "@babel/preset-env": "^7.22.9",
76
+ "@babel/preset-react": "^7.22.15",
77
+ "@babel/preset-typescript": "^7.22.5",
78
+ "@testing-library/react": "^14.0.0",
79
+ "@tsconfig/recommended": "^1.0.2",
80
+ "@tsconfig/strictest": "^2.0.2",
81
+ "@types/jest": "^29.5.4",
82
+ "@types/react": "^18.2.21",
83
+ "jest": "^29.6.1",
84
+ "jest-environment-jsdom": "^29.6.1",
85
+ "react": "^18.2.0",
86
+ "react-dom": "^18.2.0",
87
+ "typescript": "^5.1.6"
58
88
  },
59
89
  "peerDependencies": {
60
90
  "react": ">=16.9.0"
61
91
  },
62
92
  "dependencies": {
63
- "@babel/runtime-corejs3": "^7.20.7",
64
- "use-ref-from": "^0.0.1"
93
+ "@babel/runtime-corejs3": "7.22.6",
94
+ "use-memo-map": "^0.0.4-main.3fa9b81",
95
+ "use-ref-from": "0.0.2"
65
96
  }
66
97
  }
File without changes
File without changes