UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

80 lines (76 loc) 1.64 kB
import { useRef, useCallback } from 'react'; const noop = () => {}; // eslint-disable-next-line import/no-mutable-exports let deprecate = noop; if (process.env.NODE_ENV !== "production") { deprecate = ({ name, message, version }) => { Deprecations.deprecate({ name, message, version }); }; } // eslint-disable-next-line import/no-mutable-exports let useDeprecation = null; if (process.env.NODE_ENV !== "production") { useDeprecation = ({ name, message, version }) => { const ref = useRef(false); const logDeprecation = useCallback(() => { if (!ref.current) { ref.current = true; deprecate({ name, message, version }); } }, [name, message, version]); return logDeprecation; }; } else { useDeprecation = () => { return noop; }; } class Deprecations { static instance = null; static get() { if (!Deprecations.instance) { Deprecations.instance = new Deprecations(); } return Deprecations.instance; } constructor() { this.deprecations = []; } static deprecate({ name, message, version }) { const msg = `WARNING! ${name} is deprecated and will be removed in version ${version}. ${message}`; // eslint-disable-next-line no-console console.warn(msg); this.get().deprecations.push({ name, message, version }); } static getDeprecations() { return this.get().deprecations; } static clearDeprecations() { this.get().deprecations.length = 0; } } export { Deprecations, deprecate, useDeprecation };