@primer/components
Version:
Primer react components
91 lines (75 loc) • 1.72 kB
JavaScript
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;
}
}