UNPKG

@primer/components

Version:
91 lines (75 loc) 1.72 kB
import { useRef, useCallback } from 'react'; // eslint-disable-next-line @typescript-eslint/no-empty-function 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 }); }; } export { deprecate }; // 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; }; } export { useDeprecation }; export 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; } }