🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

@seznam/compose-react-refs

Package Overview
Dependencies
Maintainers
2
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@seznam/compose-react-refs - npm Package Compare versions

Comparing version
1.0.4
to
1.0.5
+47
composeRefs.ts
import {MutableRefObject, Ref} from 'react'
type OptionalRef<T> = Ref<T> | undefined
export default function composeRefs<T>(...refs: [OptionalRef<T>, OptionalRef<T>, ...Array<OptionalRef<T>>]): Ref<T> {
if (refs.length === 2) { // micro-optimize the hot path
return composeTwoRefs(refs[0], refs[1]) || null
}
const composedRef = refs.slice(1).reduce(
(semiCombinedRef: OptionalRef<T>, refToInclude: OptionalRef<T>) => composeTwoRefs(semiCombinedRef, refToInclude),
refs[0],
)
return composedRef || null
}
type NonNullRef<T> = NonNullable<Ref<T>>
const composedRefCache = new WeakMap<NonNullRef<unknown>, WeakMap<NonNullRef<unknown>, NonNullRef<unknown>>>()
function composeTwoRefs<T>(ref1: OptionalRef<T>, ref2: OptionalRef<T>): OptionalRef<T> {
if (ref1 && ref2) {
const ref1Cache = composedRefCache.get(ref1) || new WeakMap<NonNullRef<unknown>, NonNullRef<unknown>>()
composedRefCache.set(ref1, ref1Cache)
const composedRef = ref1Cache.get(ref2) || ((instance: T): void => {
updateRef(ref1, instance)
updateRef(ref2, instance)
})
ref1Cache.set(ref2, composedRef)
return composedRef as NonNullRef<T>
}
if (!ref1) {
return ref2
} else {
return ref1
}
}
function updateRef<T>(ref: NonNullRef<T>, instance: null | T): void {
if (typeof ref === 'function') {
ref(instance)
} else {
(ref as MutableRefObject<T | null>).current = instance
}
}
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"composeRefs.d.ts","sourceRoot":"","sources":["../composeRefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,GAAG,EAAC,MAAM,OAAO,CAAA;AAE3C,aAAK,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;AAExC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAUlH"}
{"version":3,"file":"composeRefs.d.ts","sourceRoot":"./","sources":["composeRefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,GAAG,EAAC,MAAM,OAAO,CAAA;AAE3C,aAAK,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;AAExC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAUlH"}

@@ -1,1 +0,1 @@

{"version":3,"file":"composeRefs.js","sourceRoot":"","sources":["../composeRefs.ts"],"names":[],"mappings":";;AAIA,SAAwB,WAAW;IAAI,cAAmE;SAAnE,UAAmE,EAAnE,qBAAmE,EAAnE,IAAmE;QAAnE,yBAAmE;;IACxG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,8BAA8B;QACrD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;KAChD;IAED,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CACtC,UAAC,eAA+B,EAAE,YAA4B,IAAK,OAAA,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,EAA7C,CAA6C,EAChH,IAAI,CAAC,CAAC,CAAC,CACR,CAAA;IACD,OAAO,WAAW,IAAI,IAAI,CAAA;AAC5B,CAAC;AAVD,8BAUC;AAGD,IAAM,gBAAgB,GAAG,IAAI,OAAO,EAA0E,CAAA;AAE9G,SAAS,cAAc,CAAI,IAAoB,EAAE,IAAoB;IACnE,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,IAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,EAA4C,CAAA;QACvG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAErC,IAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,QAAW;YACtD,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACzB,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAEhC,OAAO,WAA4B,CAAA;KACpC;IAED,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAA;KACZ;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC;AAED,SAAS,SAAS,CAAI,GAAkB,EAAE,QAAkB;IAC1D,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;QAC7B,GAAG,CAAC,QAAQ,CAAC,CAAA;KACd;SAAM;QACJ,GAAkC,CAAC,OAAO,GAAG,QAAQ,CAAA;KACvD;AACH,CAAC"}
{"version":3,"file":"composeRefs.js","sourceRoot":"./","sources":["composeRefs.ts"],"names":[],"mappings":";;AAIA,SAAwB,WAAW;IAAI,cAAmE;SAAnE,UAAmE,EAAnE,qBAAmE,EAAnE,IAAmE;QAAnE,yBAAmE;;IACxG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,8BAA8B;QACrD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;KAChD;IAED,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CACtC,UAAC,eAA+B,EAAE,YAA4B,IAAK,OAAA,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,EAA7C,CAA6C,EAChH,IAAI,CAAC,CAAC,CAAC,CACR,CAAA;IACD,OAAO,WAAW,IAAI,IAAI,CAAA;AAC5B,CAAC;AAVD,8BAUC;AAGD,IAAM,gBAAgB,GAAG,IAAI,OAAO,EAA0E,CAAA;AAE9G,SAAS,cAAc,CAAI,IAAoB,EAAE,IAAoB;IACnE,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,IAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,EAA4C,CAAA;QACvG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAErC,IAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,QAAW;YACtD,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACzB,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAEhC,OAAO,WAA4B,CAAA;KACpC;IAED,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAA;KACZ;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC;AAED,SAAS,SAAS,CAAI,GAAkB,EAAE,QAAkB;IAC1D,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;QAC7B,GAAG,CAAC,QAAQ,CAAC,CAAA;KACd;SAAM;QACJ,GAAkC,CAAC,OAAO,GAAG,QAAQ,CAAA;KACvD;AACH,CAAC"}
{
"name": "@seznam/compose-react-refs",
"version": "1.0.4",
"version": "1.0.5",
"description": "A simple utility for composing two or more react refs into a single callback ref.",
"main": "composeRefs.js",
"scripts": {
"build": "rm -rf dist/ && npm test && npm run compile && cp LICENSE package.json README.md dist/",
"build": "rm -rf dist/ && npm test && npm run compile && cp LICENSE package.json README.md composeRefs.ts dist/",
"compile": "tsc --project .",

@@ -9,0 +9,0 @@ "prepublishOnly": "echo 'Run \\'npm run publish-package\\' instead' && exit 1",