use-memo-map 0.0.5-main.fce9cbd → 0.1.0
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/index.js.map +1 -1
- package/lib/commonjs/private/usePrevious.js.map +1 -1
- package/lib/commonjs/useMemoMap.js.map +1 -1
- package/lib/esmodules/index.js.map +1 -1
- package/lib/esmodules/private/usePrevious.js.map +1 -1
- package/lib/esmodules/useMemoMap.js.map +1 -1
- package/package.json +46 -20
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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 +1 @@
|
|
|
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
|
+
{"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 +1 @@
|
|
|
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
|
+
{"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":[]}
|
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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 +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,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
|
+
{"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 +1 @@
|
|
|
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"}
|
|
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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "use-memo-map",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Memoizes calls to array map function similar to React.useMemo. Memoized results will survive next render.",
|
|
5
5
|
"files": [
|
|
6
6
|
"./lib/"
|
|
@@ -40,14 +40,15 @@
|
|
|
40
40
|
"bump:babel": "npm run bump:babel:commonjs && npm run bump:babel:esmodules",
|
|
41
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
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",
|
|
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
45
|
"postscaffold": "npm run bump:babel",
|
|
46
46
|
"precommit": "npm run precommit:eslint && npm run precommit:typescript:production && npm run precommit:typescript:test",
|
|
47
47
|
"precommit:eslint": "eslint ./src/",
|
|
48
48
|
"precommit:typescript:production": "tsc --noEmit --project ./src/tsconfig.precommit.production.json",
|
|
49
49
|
"precommit:typescript:test": "tsc --noEmit --project ./src/tsconfig.precommit.test.json",
|
|
50
50
|
"prepack": "cp ../../CHANGELOG.md . && cp ../../LICENSE . && cp ../../README.md .",
|
|
51
|
+
"switch": "cat package.json | jq --arg SWITCH_NAME $SWITCH_NAME -r '(.[\"switch:\" + $SWITCH_NAME] // {}) as $TEMPLATE | .devDependencies += ($TEMPLATE.devDependencies // {}) | .dependencies += ($TEMPLATE.dependencies // {})' | tee ./package.json.tmp && mv ./package.json.tmp ./package.json",
|
|
51
52
|
"test": "jest"
|
|
52
53
|
},
|
|
53
54
|
"repository": {
|
|
@@ -66,31 +67,56 @@
|
|
|
66
67
|
"url": "https://github.com/compulim/use-memo-map/issues"
|
|
67
68
|
},
|
|
68
69
|
"homepage": "https://github.com/compulim/use-memo-map#readme",
|
|
69
|
-
"
|
|
70
|
+
"switch:react:16": {
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@testing-library/react": "^12",
|
|
73
|
+
"@testing-library/react-hooks": "latest",
|
|
74
|
+
"@types/react": "^16",
|
|
75
|
+
"react": "16.8.0",
|
|
76
|
+
"react-dom": "16.8.0"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"switch:react:17": {
|
|
80
|
+
"devDependencies": {
|
|
81
|
+
"@testing-library/react": "^12",
|
|
82
|
+
"@testing-library/react-hooks": "latest",
|
|
83
|
+
"@types/react": "^17",
|
|
84
|
+
"react": "17.0.0",
|
|
85
|
+
"react-dom": "17.0.0"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"switch:react:18": {
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@types/react": "^18",
|
|
91
|
+
"react": "18.0.0",
|
|
92
|
+
"react-dom": "18.0.0"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
70
95
|
"devDependencies": {
|
|
71
|
-
"@babel/cli": "^7.
|
|
72
|
-
"@babel/core": "^7.
|
|
73
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
74
|
-
"@babel/preset-env": "^7.
|
|
75
|
-
"@babel/preset-react": "^7.
|
|
76
|
-
"@babel/preset-typescript": "^7.
|
|
77
|
-
"@testing-library/react": "^14.
|
|
78
|
-
"@tsconfig/recommended": "^1.0.
|
|
79
|
-
"@tsconfig/strictest": "^2.0.
|
|
80
|
-
"@types/jest": "^29.5.
|
|
81
|
-
"@types/react": "^18.2.
|
|
96
|
+
"@babel/cli": "^7.24.1",
|
|
97
|
+
"@babel/core": "^7.24.3",
|
|
98
|
+
"@babel/plugin-transform-runtime": "^7.24.3",
|
|
99
|
+
"@babel/preset-env": "^7.24.3",
|
|
100
|
+
"@babel/preset-react": "^7.24.1",
|
|
101
|
+
"@babel/preset-typescript": "^7.24.1",
|
|
102
|
+
"@testing-library/react": "^14.2.2",
|
|
103
|
+
"@tsconfig/recommended": "^1.0.4",
|
|
104
|
+
"@tsconfig/strictest": "^2.0.4",
|
|
105
|
+
"@types/jest": "^29.5.12",
|
|
106
|
+
"@types/react": "^18.2.70",
|
|
107
|
+
"escape-string-regexp": "^5.0.0",
|
|
82
108
|
"jest": "^29.7.0",
|
|
83
109
|
"jest-environment-jsdom": "^29.7.0",
|
|
84
110
|
"react": "^18.2.0",
|
|
85
111
|
"react-dom": "^18.2.0",
|
|
86
|
-
"typescript": "^5.
|
|
112
|
+
"typescript": "^5.4.3"
|
|
87
113
|
},
|
|
88
114
|
"peerDependencies": {
|
|
89
|
-
"react": ">=16.
|
|
115
|
+
"react": ">=16.8.0"
|
|
90
116
|
},
|
|
91
117
|
"dependencies": {
|
|
92
|
-
"@babel/runtime-corejs3": "^7.
|
|
93
|
-
"use-memo-map": "^0.0
|
|
94
|
-
"use-ref-from": "^0.0
|
|
118
|
+
"@babel/runtime-corejs3": "^7.24.1",
|
|
119
|
+
"use-memo-map": "^0.1.0",
|
|
120
|
+
"use-ref-from": "^0.1.0"
|
|
95
121
|
}
|
|
96
122
|
}
|