Skip to content

Commit

Permalink
fix: never assume the definition of __DEV__ in the global scope
Browse files Browse the repository at this point in the history
Especially appropriate for jest tests and react-native-web.
  • Loading branch information
jsamr committed Sep 26, 2021
1 parent aa3f45f commit f9bb9e9
Show file tree
Hide file tree
Showing 14 changed files with 26 additions and 18 deletions.
2 changes: 1 addition & 1 deletion packages/render-html/src/RenderHTMLConfigProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export default function RenderHTMLConfigProvider(
const engine = useAmbientTRenderEngine();
const profile = useProfiler({ prop: 'remoteErrorView or remoteLoadingView' });
const sourceLoaderConfig = useMemo(() => {
__DEV__ && profile();
typeof __DEV__ === 'boolean' && __DEV__ && profile();
return {
remoteErrorView: remoteErrorView || defaultRenderError,
remoteLoadingView: remoteLoadingView || defaultRenderLoading
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/RenderHTMLDebug.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { RenderHTMLProps } from './shared-types';
const RenderHTMLDebug = function RenderHTMLDebug(
props: PropsWithChildren<RenderHTMLProps>
) {
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
if (typeof props.contentWidth !== 'number') {
console.warn(debugMessage.contentWidth);
}
Expand Down
6 changes: 3 additions & 3 deletions packages/render-html/src/RenderHTMLSource.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function RawSourceLoader({
}: SourceLoaderProps): ReactElement | null {
if (isEmptySource(source)) {
/* istanbul ignore next */
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
console.warn(debugMessage.noSource);
}
return null;
Expand Down Expand Up @@ -111,13 +111,13 @@ const RenderHTMLSource = memo(
prop: 'onDocumentMetadataLoaded or onTTreeChange'
});
const ttreeEvents: TTreeEvents = useMemo(() => {
__DEV__ && profile();
typeof __DEV__ === 'boolean' && __DEV__ && profile();
return {
onDocumentMetadataLoaded,
onTTreeChange
};
}, [onDocumentMetadataLoaded, onTTreeChange, profile]);
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
if (!(typeof contentWidth === 'number')) {
console.warn(debugMessage.contentWidth);
}
Expand Down
6 changes: 3 additions & 3 deletions packages/render-html/src/TNodeRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ const TNodeRenderer = memo(function MemoizedTNodeRenderer(
if (tnode.type === 'text') {
return React.createElement(TTextRenderer, tnodeProps);
}
if (tnode.type === 'empty' && __DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__ && tnode.type === 'empty') {
if (tnode.isUnregistered) {
console.warn(
`There is no custom renderer registered for tag "${tnode.tagName}" which is not part of the HTML5 standard. The tag will not be rendered.` +
' If you don\'t want this tag to be rendered, add it to "ignoredTags" prop array. If you do, register a custom renderer for this tag.'
' If you don\'t want this tag to be rendered, add it to "ignoredTags" prop array. If you do, register an HTMLElementModel for this tag with "customHTMLElementModels" prop.'
);
} else if (tnode.tagName !== 'head') {
console.warn(
`The "${tnode.tagName}" tag is a valid HTML element but is not handled by this library. You must register a custom renderer or plugin and make sure its content model is not set to "none".` +
`The "${tnode.tagName}" tag is a valid HTML element but is not handled by this library. You must extend the default HTMLElementModel for this tag with "customHTMLElementModels" prop and make sure its content model is not set to "none".` +
' If you don\'t want this tag to be rendered, add it to "ignoredTags" prop array.'
);
}
Expand Down
6 changes: 5 additions & 1 deletion packages/render-html/src/TRenderEngineProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@ export const defaultTRenderEngineProviderProps: TRenderEngineConfig = {
*/
export function useAmbientTRenderEngine() {
const engine = React.useContext(TRenderEngineContext);
if (__DEV__ && engine === defaultTRenderEngine) {
if (
typeof __DEV__ === 'boolean' &&
__DEV__ &&
engine === defaultTRenderEngine
) {
console.error('TRenderEngineProvider is missing in the render tree.');
}
return engine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export default function RenderRegistryProvider({
}>) {
const profile = useProfiler({ prop: 'renderers' });
const registry = useMemo(() => {
__DEV__ && profile();
typeof __DEV__ === 'boolean' && __DEV__ && profile();
return new RenderRegistry(renderers, elementModels);
}, [renderers, elementModels, profile]);
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default function RenderersPropsProvider(
) {
const profile = useProfiler({ prop: 'renderersProps' });
const mergedRenderersProps = useMemo(() => {
__DEV__ && profile();
typeof __DEV__ === 'boolean' && __DEV__ && profile();
return mergeDeepRight(defaultRendererProps, props.renderersProps || {});
}, [props.renderersProps, profile]);
return React.createElement(
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/context/defaultSharedProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { RenderHTMLAmbiantSharedProps } from '../shared-types';

function WebViewPlaceholder() {
/* istanbul ignore else */
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
console.warn(
'One of your renderers is attempting to use WebView component, which has not been ' +
"provided as a prop to the RenderHtml component. As a consequence, the element won't be rendered."
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/debugMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ let debugMessage: Record<DebugType, string>;

export type DebugMessages = typeof debugMessage;
/* istanbul ignore next */
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
debugMessage = {
outdatedComputeImagesMaxWidth:
"You're attempting to use an outdated prop, 'computeImagesMaxWidth'. This prop has been replaced in version 6 with 'computeEmbeddedMaxWidth'.",
Expand Down
6 changes: 5 additions & 1 deletion packages/render-html/src/elements/ListElement.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,11 @@ export default function ListElement({
ownListType ||
listStyleTypeFallbackRecord[listType];
const listStyleType = ownListType || selectedListType;
if (__DEV__ && !(listStyleType in listStyleSpecs)) {
if (
typeof __DEV__ === 'boolean' &&
__DEV__ &&
!(listStyleType in listStyleSpecs)
) {
if (listStyleType.match(/^("|')/)) {
console.warn(
"This library doesn't support strings for list-style-type CSS properties."
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/hooks/useProfiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import identity from 'ramda/src/identity';
declare const performance: { now: () => number };

const useProfiler =
__DEV__ && typeof performance === 'object'
typeof __DEV__ === 'boolean' && __DEV__ && typeof performance === 'object'
? function useProfiler({ name, prop }: { name?: string; prop?: string }) {
const lastUpdate = useRef(0);
const profile = useCallback(
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/hooks/useTRenderEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default function useTRenderEngine({
}: TRenderEngineConfig) {
const profile = useProfiler({ name: 'TRenderEngineProvider' });
return useMemo(() => {
__DEV__ && profile();
typeof __DEV__ === 'boolean' && __DEV__ && profile();
return buildTREFromConfig({
allowedStyles,
baseStyle,
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/hooks/useTTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function useTTreeChangeEffect(ttree: TDocument) {
const updateNumber = useRef(0);
useEffect(() => {
onTTreeChange?.call(null, ttree);
if (debug && __DEV__) {
if (debug && typeof __DEV__ === 'boolean' && __DEV__) {
console.info(
`Transient Render Tree update ${++updateNumber.current}:\n${ttree.snapshot(
{
Expand Down
2 changes: 1 addition & 1 deletion packages/render-html/src/render/RenderRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default class RenderRegistry {
if (tnode.tagName! in this.customRenderers) {
const renderer = this.customRenderers[tnode.tagName!];
/* istanbul ignore next */
if (__DEV__) {
if (typeof __DEV__ === 'boolean' && __DEV__) {
// In DEV, check for discrepancies.
const elementModel = this.elementModels[tnode.tagName!];
if (!elementModel) {
Expand Down

0 comments on commit f9bb9e9

Please sign in to comment.