-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Project is outdated and unmaintained for last 5 years. We still use it in some HOCs, so for now I've put the code (it's tiny) directly in the repo and removed the bits supporting old React versions.
- Loading branch information
1 parent
0d8f168
commit d4bcdce
Showing
18 changed files
with
125 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/** | ||
* Vendored (w/ small modification) from | ||
* https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js | ||
* since project is unmaintained. | ||
* | ||
* Copyright 2015, Yahoo! Inc. | ||
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. | ||
*/ | ||
import { ForwardRef, Memo } from "react"; | ||
|
||
const REACT_STATICS = { | ||
childContextTypes: true, | ||
contextType: true, | ||
contextTypes: true, | ||
defaultProps: true, | ||
displayName: true, | ||
getDefaultProps: true, | ||
getDerivedStateFromError: true, | ||
getDerivedStateFromProps: true, | ||
mixins: true, | ||
propTypes: true, | ||
type: true | ||
}; | ||
|
||
const KNOWN_STATICS = { | ||
name: true, | ||
length: true, | ||
prototype: true, | ||
caller: true, | ||
callee: true, | ||
arguments: true, | ||
arity: true | ||
}; | ||
|
||
const FORWARD_REF_STATICS = { | ||
$$typeof: true, | ||
render: true, | ||
defaultProps: true, | ||
displayName: true, | ||
propTypes: true | ||
}; | ||
|
||
const MEMO_STATICS = { | ||
$$typeof: true, | ||
compare: true, | ||
defaultProps: true, | ||
displayName: true, | ||
propTypes: true, | ||
type: true | ||
}; | ||
|
||
const TYPE_STATICS = {}; | ||
TYPE_STATICS[ForwardRef] = FORWARD_REF_STATICS; | ||
TYPE_STATICS[Memo] = MEMO_STATICS; | ||
|
||
function getStatics(component) { | ||
return TYPE_STATICS[component["$$typeof"]] || REACT_STATICS; | ||
} | ||
|
||
const defineProperty = Object.defineProperty; | ||
const getOwnPropertyNames = Object.getOwnPropertyNames; | ||
const getOwnPropertySymbols = Object.getOwnPropertySymbols; | ||
const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; | ||
const getPrototypeOf = Object.getPrototypeOf; | ||
const objectPrototype = Object.prototype; | ||
|
||
export default function hoistNonReactStatics( | ||
targetComponent, | ||
sourceComponent, | ||
excludelist | ||
) { | ||
if (typeof sourceComponent !== "string") { | ||
// don't hoist over string (html) components | ||
|
||
if (objectPrototype) { | ||
const inheritedComponent = getPrototypeOf(sourceComponent); | ||
if (inheritedComponent && inheritedComponent !== objectPrototype) { | ||
hoistNonReactStatics(targetComponent, inheritedComponent, excludelist); | ||
} | ||
} | ||
|
||
let keys = getOwnPropertyNames(sourceComponent); | ||
|
||
if (getOwnPropertySymbols) { | ||
keys = keys.concat(getOwnPropertySymbols(sourceComponent)); | ||
} | ||
|
||
const targetStatics = getStatics(targetComponent); | ||
const sourceStatics = getStatics(sourceComponent); | ||
|
||
for (let i = 0; i < keys.length; ++i) { | ||
const key = keys[i]; | ||
if ( | ||
!KNOWN_STATICS[key] && | ||
!(excludelist && excludelist[key]) && | ||
!(sourceStatics && sourceStatics[key]) && | ||
!(targetStatics && targetStatics[key]) | ||
) { | ||
const descriptor = getOwnPropertyDescriptor(sourceComponent, key); | ||
try { | ||
// Avoid failures from read-only properties | ||
defineProperty(targetComponent, key, descriptor); | ||
} catch (e) {} | ||
} | ||
} | ||
} | ||
|
||
return targetComponent; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters